_context.SaveChanges
和之间的区别_context.AcceptAllChanges()
是AcceptAllChanges()
从数据库重新加载数据或回滚(丢弃)用户在不使用时所做的更改SaveChanges()
2 回答
ObjectContext.AcceptAllChanges 方法 - 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)。或者,您可以通过状态管理器记录失败的内容。
一旦更广泛的事务成功,您只需手动调用 AcceptAllChanges(),并且正在跟踪的更改将被丢弃。
从使用 Microsoft .Net Framework 4 访问数据一书中:
使用实体框架时,当您在 ObjectContext 对象上调用 SaveChanges 方法时,会在事务中自动处理向数据库提交的更改。另外,如果更新时没有抛出异常,则会自动调用 AcceptAllChanges 方法,这会将所有对象的状态重置为 Unchanged。尽管 SaveChanges 方法是在事务中执行的,但如果您需要在同一事务中执行其他操作,则可能需要创建自己的事务