跟踪在实体框架中删除的对象的数量和类型的方法
有什么方法可以检测上次ObjectContext.SaveChanges()
方法中所做的更改吗?跟踪在实体框架中删除的对象的数量和类型的方法
我自己跟踪更改,比如更新删除和插入对象,但是当存在外键关系时,实体框架会自动删除子引用,并且在这里我会丢失跟踪。
因此,例如,如果我删除一个学生,我跟踪我删除了一名学生。
但是,当我删除类,它会自动删除班级中的所有学生,因为我有他们的外键关系。问题是我只能在这里跟踪一个班级被删除,但没有多少同学被删除。
一种方法是在删除它之前对班级的学生进行计数,但这是一次不必要的数据库访问。
有没有其他办法?
当调用SaveChanges
时,您可以使用DbContext
上的ChangeTracker
属性找出实体框架将执行的操作。如果您在之前检查,则请致电SaveChanges
您将获得Entity Framework即将删除或修改的所有内容。
这假定确实是实体框架,它执行级联删除。它也可能是作为数据库外键上的级联删除选项实现的。在这种情况下,DB就是删除而不是EF,所以变更追踪器不会意识到挂起的删除。
哦,好的!是的,我有级联删除外键。嗯让我检查它是如何表现 –
我正在使用ObjectContext',所以没有'ChangeTracker'为它:( –
与'ObjectContext'你可以使用'myContext.ObjectStateManager.GetObjectStateEntries()'。 –
让数据库审计数据库中发生了什么。你可以重写'SaveChanges'或者赋予'OnSavingChanges'(你可以在这里找到示例),但正如你所看到的那样,它不是防水的,它很快就会恶化为包含大量if语句或甚至反射,所有的饮食表现。如果您使用Sql Server,则可以使用各种[更改跟踪选项](http://msdn.microsoft.com/zh-cn/library/bb933875.aspx)。这些将跟踪级联删除。 –