EF6交易回滚

时间:2015-07-21 15:56:38

标签: .net entity-framework transactions entity-framework-6

我们正在扩展上下文对象以与另一个系统具有同步功能。我们目前正在进行保存更改。然而,我们意识到有一种情况是使用begintransaction和多次调用savechanges在事务状态中使用上下文。我们不希望同步数据,直到完成整个过程。我们考虑过处理上下文。

我们遇到的一个问题是知道交易是否成功。如果成功那么很好的同步。如果它被回滚,那么我们当然不想同步。在处理上下文时,我们如何知道交易的状态?

3 个答案:

答案 0 :(得分:1)

让你的模型需要同步来实现一个接口,例如iSyncable,它承诺一旦模型成功保存就会同步。如果您通过导航属性拥有相关表,请保存所有内容并将其放入导航属性,然后再进行同步,以便同步功能具有所需的所有对象。

顺便说一句,如果您需要进行任何数据转换,那么这就是您执行此操作的地方。

答案 1 :(得分:1)

您需要在事务管理器中登记您的操作以接收与事务相关的通知。

MSDN IEnlistmentTransaction

答案 2 :(得分:0)

不要在处理方法中这样做。处置是为了清理。使用以下模式:

using (var tran = new TransactionScope())
using (var db = new MyContext())
{
 db.Connection.Open();
 DoWork(db);
 tran.Complete();
}

这就是你需要做的一切。