在“SaveChanges”之前获得正确的插入,更新和删除操作执行顺序

时间:2012-12-20 10:52:59

标签: entity-framework entity-framework-4

我们需要按照与数据库相同的顺序添加,修改或删除实体。

我们使用下面的代码片段来覆盖ObjectContext类中的“SaveChanges”方法,以获取已添加,修改或删除的不同实体。

foreach(ObjectStateEntry中的条目)                 ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified | EntityState.Deleted))             {
                 //每个实体的操作             }

假设我们有两张桌子A& B在数据库中。这些是无关的。我们使用实体框架在这些表上执行以下操作。

  1. 在A
  2. 中插入新行
  3. 更新B
  4. 中的一行
  5. 在B
  6. 中插入新行
  7. 更新A中的行(不是步骤1中插入的​​行)
  8. 删除B中的行(不是步骤2和3中受影响的行)
  9. 在B
  10. 中插入新行
  11. 在A
  12. 中插入新行

    在使用上面的代码片段时,我们注意到插入,更新和删除被组合在一起,即我们按顺序获得了1,3,6,7,2,4,5。

    在这篇文章(http://social.msdn.microsoft.com/forums/en-US/adodotnetentityframework/thread/d8448144-05dd-4c34-b93c-9336c3b62f6e/)中提到,没有明确的方法确定在“SaveChanges”之前完成的操作中插入的顺序。

    上面的代码段是否获取了在数据库上执行这些操作的正确顺序。

    如果此订单不正确,是否有其他方法可以获得正确的订单。

1 个答案:

答案 0 :(得分:0)

不,你不能改变操作的顺序。控制顺序的唯一方法是单独运行每个操作(每次操作后调用SaveChanges)。