我有以下代码示例:

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)控制台应用程序(针对SQL Server Express 2017)中执行此代码时,将产生以下输出:

由于该事务已被提升为分布式事务,所以我期望以.NET Core(3.0)为目标的类似控制台应用程序会抛出一个]

System.PlatformNotSupportedException(此平台不支持分布式事务。)。

但是,实际输出是:

为什么?我希望将事务提升为分布式事务与框架无关。

编辑:此.NET Core(3.0)代码示例对数据库连接有作用:

数据库架构:

CREATE DATABASE [TestDB1]

GO

CREATE TABLE [TestDB1].[dbo].[Table]([Value] [nvarchar](max) NULL)

。NET Core(3.0)控制台应用程序:

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 不]支持分布式事务,因为在每个平台上都需要不同的事务管理器。您可以在https://github.com/dotnet/runtime/issues/715上找到有关此问题的更多信息。

[此功能似乎已在2020年11月30日之前从.NET发行版5.0中添加]

还有另一个线程SA在谈论这个问题。

.net framework与java,分布式事务:.NET Framework与.NET Core相关推荐

  1. JAVA分布式事务原理及应用(转)

    JAVA分布式事务原理及应用(转) 引言 JTA(Java Transaction API)允许应用程序执行分布式事务处理--在两个或多个网络计算机资源上访问并且更新数据.JDBC驱动程序的JTA支持 ...

  2. java分布式事务原理_JAVA分布式事务原理及应用

    JTA(Java Transaction API)允许应用程序执行分布式事务处理--在两个或多个网络计算机资源上访问并且更新数据.JDBC驱动程序的JTA支持极大地增强了数据访问能力. 本文的目的是要 ...

  3. java 分布式事务_Java核心知识 Spring原理十五 JPA 原理

    1. 事务 事务是计算机应用中不可或缺的组件模型,它保证了用户操作的原子性 ( Atomicity ).一致性 ( Consistency ).隔离性 ( Isolation ) 和持久性 ( Dur ...

  4. java分布式事务——seata,tcc解决方案总结!

    目录 1.分布式事务基础理论 1.1.CAP理论 1.2.BASE理论 2.分布式事务解决方案之2PC(两阶段提交) 2.2.1 XA方案 2.2.2 Seata方案 2.2.3分布式事务解决方案之T ...

  5. java分布式事务——最终一致性,最大努力通知总结!

    目录 源码地址:https://github.com/kaixuanzhang123/dtx.git 4.分布式事务解决方案之可靠消息最终一致性 4.1.什么是可靠消息最终一致性事务 4.2.解决方案 ...

  6. java 分布式事务总结

    编程式事务 TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition( ...

  7. Java 分布式事务规范 JTA 从入门到精通

    前言 最近回顾 Spring 事务相关的设计与实现,发现 Spring 事务设计的最初目的是为了统一 Java 中 JDBC.JTA 与 JPA 事务的使用方式,并且其实现参考了 JTA 规范.大多数 ...

  8. java jta事务_JTA -- Java分布式事务管理

    (参考并转载自http://blog.donews.com/Ralph/archive/2004/11/18/174646.aspx) 关于分布式事务,我觉得有必要了解清楚以下几点: (1)目前流行的 ...

  9. Java分布式事务实现Atomikos

    先了解X/Open DTP(Distributed Transaction Processing)模型 X/Open DTP模型与XA规范 X/Open,即现在的open group,是一个独立的组织 ...

最新文章

  1. HarmonyOS之系统设置项的查询和使用
  2. 色彩的狂欢:看嘎玛·多吉次仁的画展
  3. Map 集合循环、遍历的 四 种方式
  4. 工具用途_小工具大用途:万能扳手、开瓶器、开箱器,DIY16种用法,玩过吗
  5. DNS劫持DNSmasq详细解析及详细配置
  6. Qt学习之路(10): Meta-Object系统
  7. 新手该学习Python2.x版本还是3.x版本
  8. FPGA智能传感系统(二)基于FPGA的交通灯设计
  9. PostgreSQL在何处处理 sql查询之六十三
  10. hadoop中HDFS命令遇到的问题
  11. netperf使用笔记
  12. OA网站不能正常显示(不能看正文)
  13. 基于PostgreSQL+Geoserver+OpenLayers的Webgis台风路径地图服务发布
  14. 某跳动面试官:说说微信扫码登录背后的实现原理?
  15. 微信小程序 体验版开启调试模式
  16. 周末阅读:北漂程序员边城的幸福生活
  17. CF869C The Intriguing Obsession 题解
  18. oracle修改用户system密码忘记,Oracle System密码忘记 密码修改、删除账号锁定lock (转) - mano...
  19. 如何设置路由器并利用路由器+宽带猫实现单机或是多机共享自动拨号上网
  20. matlab的多变量dmc源程序,基于MATLAB多变量DMC算法的仿真技术研究

热门文章

  1. python爬取股票大单历史记录_利用bs4爬取股票的历史交易数据
  2. 虚拟机vmnet8每次都要先禁用再启用_【零成本 amp; 超详细】使用Win10自带的Hyper-V管理工具搭建虚拟机...
  3. 嵌入式linux+io+优化,嵌入式Linux系统内存优化使用方法研究
  4. 虚拟主机搭建微信公众号服务器,建web服务器同时如何搭建虚拟主机?方法有几种?...
  5. cpucores_CPUCores怎么用 CPUCores使用方法指南_3DM单机
  6. flash背景透明、置底、禁止放大 右键菜单
  7. C语言单片机中延时程序的实现
  8. 安装配置好openstack环境的虚拟机,须要改动ip时,在数据库中同步改动ip的方法...
  9. 各浏览器CSS兼容问题
  10. 在CentOS 6.5下搭建Nagios