【问题标题】:Can I check wheter Linq 2 SQL's DataContext is tracking entities?我可以检查 Linq 2 SQL DataContext 是否正在跟踪实体吗?
【发布时间】:2010-06-06 12:00:18
【问题描述】:

如果用户调用 DataContext.SubmitChanges() 并且 DataContext 没有跟踪任何内容,我们想要抛出异常。

也就是说……如果没有插入、更新或删除,则可以调用 SubmitChanges。但我们要确保开发人员不会忘记将实体附加到 DataContext。

更好...是否可以获取 DataContext 正在跟踪的所有实体(包括未更改的实体)的集合?

PS:last question I asked 的回答是:“改为这样做”...请不要:-)

【问题讨论】:

    标签: c# linq-to-sql


    【解决方案1】:

    我认为没有任何公共/受保护的方法可以让您直接了解这一点。你可能不得不使用反射,就像我在here 下做了大约 3 条消息一样,查看ServicesChangeTracker 属性。很丑,恐怕。

    【讨论】:

      【解决方案2】:

      查看 ObjectTracker 或挂在 DataContext 之外的东西。它存储了更改列表。

      另外,我相信 SubmitChanges 是虚拟的,所以你可以拦截 SubmitChanges 调用并在那里做一些检查。

      【讨论】:

        【解决方案3】:

        如果我正确理解了这个问题...

        这些向您展示 DataContext 正在跟踪什么

        DataContext.GetChangeSet().Inserts;
        DataContext.GetChangeSet().Deletes;
        DataContext.GetChangeSet().Updates;
        

        这是你的想法吗?

        if (DataContext.GetChageSet().Inserts.Count = 0
                && DataContext.GetChageSet().Deletes.Count
                && DataContext.GetChageSet().Updates.Count)
        {
            throw new Exception("You forgot to do something with your DataContext...");
        }
        else
        {
            DataContext.SubmitChanges();
        }
        

        【讨论】:

        • nop,OP 想要跟踪对象的计数,无论它们是否已更改。
        • 不就是 DataContext.YourEntities.Count() 吗?我不明白您所说的跟踪是什么意思... DataContext 跟踪数据库中的所有对象。
        猜你喜欢
        • 1970-01-01
        • 2011-12-12
        • 2023-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多