EF6 事务回滚
EF6 Transaction Rollback
我们正在扩展上下文对象以具有与另一个系统的同步功能。我们目前正在 savechanges 中执行此操作。然而,我们意识到有一种情况,上下文将用于事务状态,使用 begintransaction 多次调用 savechanges。在整个过程完成之前,我们不想同步数据。我们考虑过在处理上下文时这样做。
我们面临的一个问题是了解交易是否成功。如果它成功了,那么很好的同步了。如果它被回滚,那么我们当然不想同步。当处理上下文时,我们如何知道事务的状态?
不要在dispose方法中做。处置是为了清理。使用以下模式:
using (var tran = new TransactionScope())
using (var db = new MyContext())
{
db.Connection.Open();
DoWork(db);
tran.Complete();
}
这就是您需要做的全部。
让您的模型需要同步以实现一个接口,例如 iSyncable,它承诺您将在模型成功保存后立即同步。如果您通过导航属性拥有相关表,请保存所有内容并将其放入导航属性中,然后再进行同步,以便您的同步功能拥有所需的所有对象。
顺便说一句,如果您需要进行任何数据转换,这就是您进行操作的地方。
您需要在事务管理器中登记您的操作才能接收与事务相关的通知。
我们正在扩展上下文对象以具有与另一个系统的同步功能。我们目前正在 savechanges 中执行此操作。然而,我们意识到有一种情况,上下文将用于事务状态,使用 begintransaction 多次调用 savechanges。在整个过程完成之前,我们不想同步数据。我们考虑过在处理上下文时这样做。
我们面临的一个问题是了解交易是否成功。如果它成功了,那么很好的同步了。如果它被回滚,那么我们当然不想同步。当处理上下文时,我们如何知道事务的状态?
不要在dispose方法中做。处置是为了清理。使用以下模式:
using (var tran = new TransactionScope())
using (var db = new MyContext())
{
db.Connection.Open();
DoWork(db);
tran.Complete();
}
这就是您需要做的全部。
让您的模型需要同步以实现一个接口,例如 iSyncable,它承诺您将在模型成功保存后立即同步。如果您通过导航属性拥有相关表,请保存所有内容并将其放入导航属性中,然后再进行同步,以便您的同步功能拥有所需的所有对象。
顺便说一句,如果您需要进行任何数据转换,这就是您进行操作的地方。
您需要在事务管理器中登记您的操作才能接收与事务相关的通知。