在我们当前的项目中,我们使用 ADO.NET Entity Framework 作为应用程序的数据层。有些任务需要在事务中运行,因为在数据库中有很多工作要做。我正在使用TransactionScope来围绕这些任务。
using (TransactionScope transactionScope = new TransactionScope(TransactionScopeOption.RequiresNew))
{
// Do something...
transactionScope.Complete();
}
问题是一旦我使用TransactionScope就会发生异常:
System.Data.EntityException:基础提供程序在打开时失败。---> System.Transactions.TransactionManagerCommunicationException:与底层事务管理器的通信失败。---> System.Runtime.InteropServices.COMException (0x80004005):对 COM 组件的调用已返回错误 HRESULT E_FAIL。
似乎此错误与MSDTC(Microsoft 分布式事务协调器)有关。当我更改 MSDTC 的安全配置时,会引发另一个异常:
System.Data.EntityException:基础提供程序在打开时失败。---> System.Transactions.TransactionManagerCommunicationException:分布式事务管理器 (MSDTC) 的网络访问已被禁用。请使用组件服务管理工具在 MSDTC 的安全配置中启用 DTC 以进行网络访问。
但是配置了 MSDTC,TransactionScope会导致错误。有人知道这里出了什么问题吗?