_context.SaveChanges
和_context.AcceptAllChanges()
之间的区别是AcceptAllChanges()
是从数据库重新加载数据还是回滚(丢弃)用户所做的更改使用SaveChanges()
答案 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方法是在一个中执行的 如果需要,您可能需要创建自己的事务 在同一交易中执行其他操作