我一直在阅读这篇文章,有些文档似乎与现实无关。一些潜在的原因在这里是合适的,但它们只与2008年或更早的相关。
我定义了一个事务范围。我在事务范围内使用了许多不同的EF上下文(在不同的方法调用中),但是除了其中一个之外的所有其他只用于数据读取。 Context的最终用法是创建一些新对象并将其添加到上下文中,然后调用
context.SaveChanges()
IIS正在一台服务器上运行。 DB(Sql2012)正在另一台服务器(WinServer 2012)上运行。
当我执行此代码时,收到错误:
分布式事务管理器(MSDTC)的网络访问已经完成 禁用。请在安全性中启用DTC以进行网络访问 使用组件服务管理的MSDTC配置 工具。
显然,如果我在IIS计算机上启用DTC,这就会消失。但是我为什么需要?
此:
http://msdn.microsoft.com/en-us/library/ms229978.aspx
规定:
•至少一个不支持单阶段的持久资源 通知已在交易中登记。 •至少两个耐用 支持单阶段通知的资源列入 交易
我理解的不是这里的情况。
答案 0 :(得分:0)
确定。我不完全确定这是否应该发生(根据MS doco),但我已经找到了原因和解决方案。
我正在使用ASPNet成员资格提供程序,并且在我的web.config中有两个连接字符串。我认为他们指向同一个数据库的事实足以让他们被认为是同样的“持久资源”。
但是我发现会员连接字符串也有:
Connection Timeout=60;App=EntityFramework
而实体框架连接字符串没有。
将这些值设置为相同的连接字符串意味着事务不会升级到MSDTC。