事务范围(TransactionScope)引发异常:“此平台不支持分布式事务。”

3

TransactionScope抛出异常。我正在使用ASP.NET Core和Core 3.0。

在Windows本地机器上,我会遇到以下问题:“此平台不支持分布式事务。”

我想要将两个数据库同步,并希望使用TransactionScope在两个数据库中获得一致的状态。

当我将其部署到使用AppService和Azure Sql的Azure中时,它可以正常工作。

通常,当我检查具有.net core 3.0的此链接时,它应该可以正常工作。 https://learn.microsoft.com/de-de/dotnet/api/system.transactions.transactionscope?view=netcore-3.0

希望有人能帮助我。

using (var scope = new TransactionScope())
{

   -- database1
   using (SqlConnection connection = new SqlConnection(connectionString_DB1))
   {
      using (System.Data.SqlClient.SqlCommand cmd = connection.CreateCommand())
      {
         ....
         connection.Open();
         result = cmd.ExecuteNonQuery();
      }
   }

   --database2
   using (SqlConnection connection = new SqlConnection(connectionString_DB2))
   {
      using (System.Data.SqlClient.SqlCommand cmd = connection.CreateCommand())
      {
         ....
         connection.Open();
         result = cmd.ExecuteNonQuery();
      }
   }

   scope.Complete();
}

2
谢谢!不是很好,我已经看过了,这个答案并不能解决我的问题。我正在使用.NET Core 3.0,并且正如我所提到的,它在Azure上运行正常,但在我的Windows电脑上无法运行。微软在他们的页面上说它可以工作,并给出了一个例子。有人能说明为什么它在Azure上可以工作但在本地无法工作吗?是否会有解决方案?非常感谢您的帮助! - Maza
1个回答

0

除了使用using,在连接后添加Close方法调用。

我刚刚在明确连接到同一数据库并放置using的情况下,使用TransactionScope遇到了相同的错误。大多数答案都说DisposeClose是相同的,但似乎它们并不是:从我从源代码中获得的信息来看,Close方法明确地将连接返回到池中,而我找不到与Dispose相同的代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接