如果在任何阶段出现错误,我有一个需要回滚所有更新和插入的进程。所以我想使用TransactionScope类来实现这一目标。这是我的代码:
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required))
{
IWE dbContext1 = null;
using (dbContext1 = new IWE())
{
dbContext1.Connection.Open();
//make some changes using the dbContext1
//Save Changes but don't discard yet
dbContext1.SaveChanges(false);
//make a call to another database
using (EPE context = new EPE())
{
//add or makes some changes
context.SaveChanges(false);
}
}
//if there were no problems above committ the transaction
if (success)
{
////if we get here things are looking good.
scope.Complete();
//accept the changes above against these connections.
dbContext1.AcceptAllChanges();
}
}
问题是,一旦我调用第二个连接,我就会收到错误:
“分布式事务管理器(MSDTC)的网络访问已经完成 禁用。请在安全性中启用DTC以进行网络访问 使用组件服务管理的MSDTC配置 工具“。
我已检查过以确保在两台服务器上都启用了MSDTC。或者至少看起来如此。
其他信息: - 他们之间没有防火墙 - 第一个数据库服务器运行Windows Server 2003 R2 w / sql 2005 - 第二个DB服务器正在运行Windows Server 2003 w / sql 2000
任何人都可以使用交易范围w /或使用分布式交易来指向正确的方向吗?
提前致谢, 比利
答案 0 :(得分:1)
在尝试使分布式事务工作的时间很长时间后,我最终以不同的方式进行此操作。
我的解决方案是只使用一个连接。所以我在第一个DB上创建了一个视图,该视图映射到我需要插入的第二个DB(不同的服务器)上的数据库表。我将该视图导入到我的实体模型以及所有三个存储过程cud语句(仅使用insert但需要所有这些)并相应地将它们映射到实体对象。
之后,一切都按照单一连接进行。