删除前更新实体

时间:2011-07-07 14:53:28

标签: c# entity-framework ef-code-first

如何在实际删除实体之前更新实体中包含的审核信息?我正在研究一个派生自DbContext的类。

我尝试将状态更改为Modified,然后设置更新的信息,然后调用base.SaveChanges(),然后将其标记为已删除。当我在设置更新的信息后尝试调用SaveChanges时出现问题。似乎关系的其他对象被标记为已删除,我得到此异常:

"A relationship from the 'ChildrenEntity' AssociationSet is in the 'Deleted' state. Given    multiplicity constraints, a corresponding 'ParentEntity' must also in the 'Deleted' state." 

谢谢!

1 个答案:

答案 0 :(得分:2)

是的,这是有问题的,你可能找不到更好的方法然后使用数据库中的删除触发器。如果你想在应用程序中处理它,工作方式将是:

  • 迭代context.ObjectStateManager.GetObjectStateEntires中的所有记录,并将每个条目的实际状态存储到某个临时数据结构中。
  • 将所有条目设置为未更改状态,但首先要修改的条目除外。
  • 第一次致电SaveChanges
  • 再次迭代所有状态条目并将它们设置为存储在临时数据结构中的状态
  • 再次致电SaveChanges

您应该在TransactionScope

中执行整个操作