如何追踪使用Entity Framework删除的对象数量和类型

3
有没有办法检测上一个 ObjectContext.SaveChanges() 方法所做的更改?
我自己跟踪对象的更新、删除和插入等更改,但当存在外键关系时,实体框架会自动删除子引用,这样我就失去了跟踪。
例如,如果我删除一个学生,我会跟踪到我已经删除了一个学生。
但是当我删除一个班级时,它会自动删除班级中的所有学生,因为我为它们设置了外键关系。问题在于,我只能跟踪到一个班级被删除了,而不知道有多少学生在班级中被删除了。
一种方法是在删除班级之前计算班级中的学生数量,但这是对数据库的不必要访问。
还有其他方法吗?

让数据库审计数据库中发生的事情。您可以覆盖 SaveChanges 或订阅 OnSavingChanges(您可以在此处找到示例),但是正如您所看到的,它并不是完全可靠的,并且很快会退化为具有大量 if 或甚至反射的代码,这些都会影响性能。如果您使用 Sql Server,则有各种更改跟踪选项。这些选项将默认跟踪级联删除。 - Gert Arnold
1个回答

2
您可以使用DbContext上的ChangeTracker属性,了解在调用SaveChanges时Entity Framework将执行的操作。如果您在调用SaveChanges之前检查它,您将得到Entity Framework即将删除或修改的所有内容。
这假定确实是Entity Framework执行了级联删除。它也可能已经在数据库中作为外键的级联删除选项实现。在这种情况下,是数据库执行删除而不是EF,因此更改跟踪器将不会意识到待处理的删除。

哦,好的!是的,我有外键级联删除。嗯,让我检查一下它的行为如何。 - Pawan Nogariya
我正在使用ObjectContext,所以它没有ChangeTracker:( - Pawan Nogariya
使用 ObjectContext,您可以使用 myContext.ObjectStateManager.GetObjectStateEntries() - Anders Abel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接