我正在使用 Entity Framework 5,需要在单个事务中进行多个存储过程调用。它们都是插入,其中每个都依赖于前一个的输出,我希望能够在一个失败的情况下回滚所有内容。每个调用都使用相同的实体对象。第一个调用成功执行,但下一个调用总是失败并出现以下错误:
“底层提供商在 Open 上失败。”
内部异常:“分布式事务管理器 (MSDTC) 的网络访问已被禁用。请使用组件服务管理工具在 MSDTC 的安全配置中为网络访问启用 DTC。”
内部内部异常:“事务管理器已禁用对远程/网络事务的支持。(来自 HRESULT 的异常:0x8004D024)”
有没有办法在不走 DTC 道路的情况下做到这一点?
代码:
ObjectParameter outputParam1 = new ObjectParameter("newEntity1", 0);
ObjectParameter outputParam2 = new ObjectParameter("newEntity2", 0);
using (var scope = new TransactionScope())
{
try
{
using(var context = new DatabaseContext())
{
context.f_createEntity1(outputParam1);
}
using(var context = new DatabaseContext())
{
context.f_createEntity2(ouputParam2, outputParam1.Value);
}
... other calls ...
scope.Complete();
}
catch (Exception ex)
{
... handle error ...
}
}