.net framework与java,分布式事务:.NET Framework与.NET Core
我有以下代碼示例:
static void Main(string[] args)
{
TransactionManager.DistributedTransactionStarted += (sender, eventArgs) =>
{
Console.WriteLine("Promoted to distributed transaction!");
};
?
const string connectionString = @"Server=localhost\SQLEXPRESS;Database=master;Integrated Security=true;";
?
using (var tx = new TransactionScope())
using (var conn1 = new SqlConnection(connectionString))
using (var conn2 = new SqlConnection(connectionString))
{
conn1.Open();
Console.WriteLine("conn1 opened");
?
conn2.Open();
Console.WriteLine("conn2 opened");
?
tx.Complete();
}
?
Console.ReadLine();
?
}
在.NET Framework(4.8)控制臺應(yīng)用程序(針對SQL Server Express 2017)中執(zhí)行此代碼時,將產(chǎn)生以下輸出:
由于該事務(wù)已被提升為分布式事務(wù),所以我期望以.NET Core(3.0)為目標的類似控制臺應(yīng)用程序會拋出一個]
System.PlatformNotSupportedException(此平臺不支持分布式事務(wù)。)。
但是,實際輸出是:
為什么?我希望將事務(wù)提升為分布式事務(wù)與框架無關(guān)。
編輯:此.NET Core(3.0)代碼示例對數(shù)據(jù)庫連接有作用:
數(shù)據(jù)庫架構(gòu):
CREATE DATABASE [TestDB1]
GO
CREATE TABLE [TestDB1].[dbo].[Table]([Value] [nvarchar](max) NULL)
。NET Core(3.0)控制臺應(yīng)用程序:
static void Main(string[] args)
{
TransactionManager.DistributedTransactionStarted += (sender, eventArgs) =>
{
Console.WriteLine("Promoted to distributed transaction!");
};
const string connectionString = @"Server=localhost\SQLEXPRESS;Database=TestDB1;Integrated Security=true;";
using (var tx = new TransactionScope())
using (var conn1 = new SqlConnection(connectionString))
using (var conn2 = new SqlConnection(connectionString))
{
conn1.Open();
Console.WriteLine("conn1 opened");
using (var cmd1 = conn1.CreateCommand())
{
cmd1.CommandText = "INSERT INTO [dbo].[Table] ([Value]) VALUES ('test 1')";
cmd1.ExecuteNonQuery();
Console.WriteLine("Record inserted through conn1");
}
conn2.Open();
Console.WriteLine("conn2 opened");
using (var cmd2 = conn2.CreateCommand())
{
cmd2.CommandText = "INSERT INTO [dbo].[Table] ([Value]) VALUES ('test 1')";
cmd2.ExecuteNonQuery();
Console.WriteLine("Record inserted through conn2");
}
tx.Complete();
Console.WriteLine("Transaction completed");
}
Console.ReadLine();
}
和控制臺輸出:
注意:對于2個連接使用2個different連接字符串,此示例也會成功!
0
投票
NET Core 不]支持分布式事務(wù),因為在每個平臺上都需要不同的事務(wù)管理器。您可以在https://github.com/dotnet/runtime/issues/715上找到有關(guān)此問題的更多信息。
[此功能似乎已在2020年11月30日之前從.NET發(fā)行版5.0中添加]
還有另一個線程SA在談?wù)撨@個問題。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的.net framework与java,分布式事务:.NET Framework与.NET Core的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 国内有炒外汇的平台吗
- 下一篇: 手环如何监测睡眠(智能手环推荐)