跟踪在实体框架中删除的对象的数量和类型的方法

问题描述:

有什么方法可以检测上次ObjectContext.SaveChanges()方法中所做的更改吗?跟踪在实体框架中删除的对象的数量和类型的方法

我自己跟踪更改,比如更新删除和插入对象,但是当存在外键关系时,实体框架会自动删除子引用,并且在这里我会丢失跟踪。

因此,例如,如果我删除一个学生,我跟踪我删除了一名学生。

但是,当我删除类,它会自动删除班级中的所有学生,因为我有他们的外键关系。问题是我只能在这里跟踪一个班级被删除,但没有多少同学被删除。

一种方法是在删除它之前对班级的学生进行计数,但这是一次不必要的数据库访问。

有没有其他办法?

+0

让数据库审计数据库中发生了什么。你可以重写'SaveChanges'或者赋予'OnSavingChanges'(你可以在这里找到示例),但正如你所看到的那样,它不是防水的,它很快就会恶化为包含大量if语句或甚至反射,所有的饮食表现。如果您使用Sql Server,则可以使用各种[更改跟踪选项](http://msdn.microsoft.com/zh-cn/library/bb933875.aspx)。这些将跟踪级联删除。 –

当调用SaveChanges时,您可以使用DbContext上的ChangeTracker属性找出实体框架将执行的操作。如果您在之前检查,则请致电SaveChanges您将获得Entity Framework即将删除或修改的所有内容。

这假定确实是实体框架,它执行级联删除。它也可能是作为数据库外键上的级联删除选项实现的。在这种情况下,DB就是删除而不是EF,所以变更追踪器不会意识到挂起的删除。

+0

哦,好的!是的,我有级联删除外键。嗯让我检查它是如何表现 –

+0

我正在使用ObjectContext',所以没有'ChangeTracker'为它:( –

+0

与'ObjectContext'你可以使用'myContext.ObjectStateManager.GetObjectStateEntries()'。 –