【问题标题】:TransactionScope and SQL Server CompactTransactionScope 和 SQL Server Compact
【发布时间】:2011-10-05 03:37:10
【问题描述】:

SQL Server Compact 不支持分布式事务。因此,如果 TransactionScope 内有多个连接 - 将引发异常。有什么方法可以设置 ADO.NET 提供程序以将一个连接用于相同的连接字符串?

我知道我可以通过 connection.BeginTransaction 使用常规事务,但我更喜欢 TransactionScope。

更新
抱歉,我没有提到我使用实体框架,所以我无法控制 SQL 命令。我可能只是传递连接字符串。并且由于某种原因,为 TransactionScope 中的一个连接字符串创建了几个连接对象。

【问题讨论】:

  • 你能提供一些代码吗?您可以手动设置命令的连接

标签: .net sql-server entity-framework transactionscope distributed-transactions


【解决方案1】:

更新的答案(来自here 的代码示例):

using (var context = new MyContext())
{
    using (var txscope = new TransactionScope())
    {
        context.Connection.Open();
        // do query 1
        // do query 2
    }
}

更新

如您所说,另一种解决方案是创建一个连接对象并在对象上下文的构造函数中使用它。

More information 关于实体何时打开新连接。

【讨论】:

  • 但是@Idsa 在他的问题中使用了它。从他自己的回答中可以看出,它奏效了!
  • 不知道。赞成。您的解决方案适用于一个 ObjectContext。但是我需要通过几个 ObjectContext 建立一个连接,如下所示。但我会标记你的答案。
  • @leppie,SQLCE 支持 TransactionScope。不支持分布式事务
  • @Idsa 也添加了您的解决方案。
  • 我的立场是正确的。 SQLCE 有一个限制,即应在事务范围内打开连接。我已经打开了连接,这就是我的测试无法正常工作的原因。这里是technet文章以供进一步参考technet.microsoft.com/en-us/library/bb896149(v=sql.110).aspx
【解决方案2】:

我的错误是我将连接字符串传递给ObjectContext。如果我传递连接对象,则只使用一个连接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-26
    • 1970-01-01
    相关资源
    最近更新 更多