【问题标题】:Using transactions with EF4.1 and SQL 2012 - why is DTC required?在 EF4.1 和 SQL 2012 中使用事务 - 为什么需要 DTC?
【发布时间】:2012-10-04 06:52:59
【问题描述】:

我已经阅读了很多关于这本书的内容,其中一些文档似乎与现实无关。一些潜在的原因在这里是合适的,但它们只与 2008 年或更早的时间有关。

我定义了一个事务范围。我在事务范围内使用了许多不同的 EF 上下文(在不同的方法调用中),但是除了其中一个之外,它们都仅用于数据读取。 Context的最终用途是创建并添加一些新对象到上下文中,然后调用

context.SaveChanges()

IIS 正在一台服务器上运行。 DB (Sql2012) 正在另一台服务器 (WinServer 2012) 上运行。

当我执行此代码时,我收到错误:

分布式事务管理器 (MSDTC) 的网络访问权限已 禁用。请在安全中启用 DTC 以进行网络访问 使用组件服务管理配置 MSDTC 工具。

显然,如果我在 IIS 机器上启用 DTC,它就会消失。但是我为什么需要这样做?

这个:

http://msdn.microsoft.com/en-us/library/ms229978.aspx

状态:

• 至少一种不支持单相的持久资源 通知在事务中登记。 • 至少两个耐用 支持单阶段通知的资源在 交易

我的理解不是这里的情况。

【问题讨论】:

    标签: sql-server-2012 transactionscope msdtc


    【解决方案1】:

    好的。我不完全确定这是否应该发生(根据 MS doco),但我已经弄清楚了原因和解决方案。

    我正在使用 ASPNet 成员资格提供程序,并且在我的 web.config 中有两个连接字符串。我认为它们指向同一个数据库这一事实足以让它们被视为相同的“持久资源”。

    但是我发现会员连接字符串也有:

    Connection Timeout=60;App=EntityFramework
    

    而实体框架连接字符串没有。

    将这些值设置为相同的连接字符串意味着事务不会升级到 MSDTC。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多