多个EF数据库我可以避免使用MSDTC吗?

时间:2016-03-02 22:22:01

标签: .net sql-server entity-framework transactionscope msdtc

我有两个SQL Server数据库(具有不同的表)和一个实体框架DbContext,它代表了每个数据库。每个上下文的表都将作为业务流程的一部分进行CRUD。在流程结束时,我想使用一个事务来确保一切都得到保存,或者什么都没有。到目前为止,我能够使用它的唯一方法是使用类似于下面的代码:

using (var scope = new TransactionScope(TransactionScopeOption.Required))
{   
    DataMgr.EFAccount.SaveChanges();
    DataMgr.EFCompany.SaveChanges();
    scope.Complete();
}

不幸的是,此代码使用MSDTC,这会导致我真正想要避免的额外性能损失。我听说如果对所有数据库更新使用相同的连接,则可以摆脱MSDTC。但是,这些DbContexts中的每一个都有自己的数据库连接,我找不到在DbContext创建后更改连接的方法。

有没有人知道在这种情况下我可以避免MSDTC的方式?我们使用的是EF 6.0,.NET framework 4.5.2和SQL Server 2012.我们目前正在使用数据库 - 但这可能会改变。

0 个答案:

没有答案