我可以检查Linq 2 SQL DataContext是否正在跟踪实体?

时间:2008-11-06 10:52:36

标签: c# linq-to-sql

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

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

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

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

3 个答案:

答案 0 :(得分:1)

我认为没有任何公共/受保护的方法可以让您直接获得此方法。您可能必须使用反射,就像我在here下查看3条消息一样,查看ChangeTracker的{​​{1}}属性。非常难看,我很害怕。

答案 1 :(得分:0)

查看ObjectTracker或者挂起DataContext的东西。它有更改列表存储在那里。

另外,我认为SubmitChanges是虚拟的,所以你可以拦截SubmitChanges调用并在那里进行一些检查。

答案 2 :(得分:0)

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

这些显示了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();
}