实体框架中的SaveChanges与AcceptAllChanges

时间:2012-10-12 12:40:33

标签: c# entity-framework

_context.SaveChanges_context.AcceptAllChanges()之间的区别是AcceptAllChanges()是从数据库重新加载数据还是回滚(丢弃)用户所做的更改使用SaveChanges()

2 个答案:

答案 0 :(得分:21)

ObjectContext.AcceptAllChanges Method - MSDN

  

如果调用SaveChanges方法并且AcceptAllChangesAfterSave   如果未指定,则用户必须调用AcceptAllChanges方法。该   AcceptAllChanges方法在事务的场景中很有用   失败,用户想重试。

您可能会看到:http://blogs.msdn.com/b/alexj/archive/2009/01/11/savechanges-false.aspx

  

如果调用SaveChanges()或SaveChanges(true),则EF只会假设   如果它的工作完成没问题,一切都很好,所以它会   丢弃它一直在跟踪的更改,并等待新的更改。

     

不幸的是,如果在其他地方出现问题   交易,因为EF丢弃了它跟踪的变化,我们   无法恢复。

     

这是SaveChanges(false)和AcceptAllChanges()的用武之地。

     

SaveChanges(false)告诉EF执行必要的数据库   命令,但保持更改,以便可以重播它们   必要的。

     

现在,如果更广泛的交易失败,您可以重试特定的EF   位,另一次调用SaveChanges(false)。或者你可以   通过状态管理器来记录失败的内容。

     

一旦更广泛的交易成功,您只需致电   手动接受AcceptCllnges(),以及正在跟踪的更改   被丢弃了。

答案 1 :(得分:2)

使用Microsoft .Net Framework 4访问数据书:

  

使用Entity Framework时,提交更改   当您在事务中自动处理数据库   在ObjectContext对象上调用SaveChanges方法。而且,   如果没有异常,则自动调用AcceptAllChanges方法   更新时抛出,这将重置所有对象的状态   不变。虽然SaveChanges方法是在一个中执行的   如果需要,您可能需要创建自己的事务   在同一交易中执行其他操作