DDD~领域事件中使用分布式事务

对于一个聚合来说,它可能会被附加很多事件,这里我们叫它领域事务,因为一个聚会我们可以把它理解成一个领域,一个业务。对于领域事件不清楚的同学可以看看我的这篇文章《DDD~领域事件与事件总线》,里面有详细的说明,今天主要说一下领域里的事务,即领域事件的数据处理和主逻辑里的数据处理在同一事务里完成。

知识准备

SQL2005环境使用TransactionScopeNoMsdtc事务,它是占占开发的,原理是将一批操作包裹到一个SqlConnection里,由开发者维护接连的关闭,这也是使用时要特别注意的地方,因为如果不关闭连接,SQL链接池会益出。

SQL2008环境使用微软自己的分布式事务实现TransactionScope,它对于同一个上下文来说,是不会被提升为分布式事务的,这一点对SQL2005要强很多。

代码实践

  /// <summary>/// 添加WebSystem表时,所需要的事件对象/// </summary>
    [Serializable]public class WebSystemCreateEvent : EventBase{/// <summary>/// 数据上下文,它与架构无关,可以是Linq2Sql,EF,ADO.NET/// </summary>public IUnitOfWork UnitOfWork { get; set; }/// <summary>/// 对象主键/// </summary>public int ID { get; set; }}
      [HttpPost]public ActionResult WebSystem(FormCollection form){//订阅领域事件EventBus.Instance.Subscribe<WebSystemCreateEvent>(i =>{var entity1 = new DbContextRepository<WebSystem>(i.UnitOfWork).Find(i.ID);entity1.WebSystemName = entity1.WebSystemName + "更新了";new DbContextRepository<WebSystem>(i.UnitOfWork).Update(entity1);});IUnitOfWork UnitOfWork = new backgroundEntities1();var db = new DbContextRepository<WebSystem>(UnitOfWork);using (TransactionScope trans = new TransactionScope()){var entity = new WebSystem{Info = form["Info"],Status = Convert.ToInt32(form["Status"]),WebSystemName = form["WebSystemName"]};db.Insert(entity);//发布领域事务EventBus.Instance.Publish(new WebSystemCreateEvent{ID = entity.WebSystemID,UnitOfWork = UnitOfWork,});trans.Complete();}return RedirectToAction("WebSystemList");

SQL截图

TransactionScopeNoMsdtc截图

TransactionScope截图

本地WWW网站服务器的MSDTC为禁用状态

本文转自博客园张占岭(仓储大叔)的博客,原文链接:DDD~领域事件中使用分布式事务,如需转载请自行联系原博主。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/278999.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在PowerPoint中制作打字机或命令行动画

Adding quirky animations to your Microsoft PowerPoint presentation gives your slideshow a little extra life. Not only will adding a typewriter or command line animation entertain your audience, but it will also keep them focused on the text. 在您的Microsof…

oracle中spool卸数,数据卸载--spool的使用

&#xfeff;&#xfeff;引言在项目中&#xff0c;我们经常会遇到数据的卸载、装载需求。卸载就是需要将数据从数据库中导入到文本文件中的需求&#xff0c;这样的方法有很多&#xff0c;比较常用的就是spool命令。装载就是需要将数据从文本文件中导入到数据库中。方法也有很多…

Objective-C中的@property

1.property是什么 Property是声明属性的语法&#xff0c;它可以快速方便的为实例变量创建存取器&#xff0c;并允许我们通过点语法使用存取器。 存取器&#xff08;accessor&#xff09;&#xff1a;指用于获取和设置实例变量的方法。用于获取实例变量值的存取器是getter&#…

Linux基础命令---findfs

findfs 查找指定卷标或者UUID的文件系统对应的设备文件。findfs将搜索系统中的磁盘&#xff0c;寻找具有标签匹配标签或与UUID相等的文件系统。如果找到文件系统&#xff0c;文件系统的设备名称将打印在stdout上。 此命令的适用范围&#xff1a;RedHat、RHEL、Ubuntu、CentOS、…

canvas 平滑运动_什么是电视上的运动平滑?人们为什么讨厌它?

canvas 平滑运动Willy Barton/Shutterstock.com威利巴顿/Shutterstock.comIf you’ve just bought a new TV, you might be wondering why everything you watch feels eerily sped up and smooth, like you’re watching a live broadcast all the time. You’re not imaginin…

linux guard什么进程,使用linux系统性能监控工具KSysguard监控远端主机介绍

KDE System Guard默认的窗口前端图形界面使用传感器(sensors)获得要显示的信息。传感器返回的可以是一个简单的数值或更复杂的信息如表格。针对不同的信息类型都提供了一个或多个显示界面。这些显示界面被组织在多个工作表中&#xff0c;工作表可以独立存储和加载。KSysguard主…

macbook充电_如何判断MacBook是否正在充电

macbook充电2p2play / Shutterstock2p2play / ShutterstockForgetting to charge your MacBook properly overnight can leave you with a headache in the morning. And if you’re troubleshooting a broken MacBook, checking if it’s able to charge is one way to rule o…

mysql记录

当没有用EXISTS引入子查询时&#xff0c;在选择列表中只能指定一个表达式转载于:https://www.cnblogs.com/niuben/p/9920741.html

PIL.Image convert to numpy array

当使用PIL.Image读取图像时&#xff0c;如果直接使用numpy.array()转换会出现错误&#xff1a; lst list() for file_name in os.listdir(dir_image):image PIL.Image.open(file_name)lst.append(image) arr numpy.array(lst) 此时&#xff0c;上述最后一行在执行时会出现错…

NFC服务器在Linux,linux 安装 libnfc ,打开串口PN532

硬件准备&#xff1a;USB转串口4针杜邦线PN532模块IC卡一张(比如门禁卡&#xff0c;饭卡等)软件准备&#xff1a;Ubuntu 物理机一台能够访问互联网1&#xff0c;将PN532与USB转串口连接好,放一张IC卡靠近PN532模块2&#xff0c;安装libnfc&#xff1a;chunliubuntu:~$ sudo apt…

chrome同步_如何在Chrome中打开或关闭同步

chrome同步Google Chrome lets you sync up your Google account to your browser across any device. When enabled, bookmarks, history, passwords, extensions, and themes—among many other settings—sync from your Google account, creating a seamless experience no…

sublime text3搭建react native

Sublime Text 3 搭建React.js开发环境 Sublime有很强的自定义功能&#xff0c;插件库很庞大&#xff0c;针对新语言插件更新很快&#xff0c;配合使用可以快速搭建适配语言的开发环境。 1. babel-sublime 支持ES6&#xff0c; React.js, jsx代码高亮&#xff0c;对 JavaScript,…

linux系统输入指令,详解linux系统输入输出管理和vim的常用功能

####系统中输入输出的管理####1.理解系统的输入输出重定向输入重定向是指把文件导入到命令中&#xff0c;而输出重定向则是把原本要输出到屏幕的数据信息写入到指定文件中。2.管理输入输出的符号##输出重定向> ##重定向正确输2> ##重定向错误输出&> …

Deep Learning(深度学习)学习笔记整理(二)

本文整理了网上几位大牛的博客&#xff0c;详细地讲解了CNN的基础结构与核心思想&#xff0c;欢迎交流 [1]Deep learning简介 [2]Deep Learning训练过程 [3]Deep Learning模型之&#xff1a;CNN卷积神经网络推导和实现 [4]Deep Learning模型之&#xff1a;CNN的反向求导及练习 …

百度新闻 谷歌新闻_每日新闻摘要:到目前为止,Google I / O提供的最佳信息

百度新闻 谷歌新闻Google’s yearly developer conference started yesterday, and the keynote was chock-full of announcements, demos, and some utterly mind-blowing tech. From Assistant to Android, here’s some of the best stuff to come out of I/O 2019 so far. …

u盘装服务器linux软件,服务器维护给您的U盘安装linux

服务器维护给您的U盘安装linux如何做好服务器维护?北京艾锑无限科技与你谈谈IT人员必须知道的服务器维护信息服务器维护小知识因为现在linux普及率实在不高&#xff0c;很多地方都没有安装&#xff0c;包括高校机房。为了自身方便和宣传推广linux&#xff0c;决定在U盘上安装一…

几个WMS的问题处理

采购订单没有生成上传订单号pkg_inpurchase_task.p_rk_sc_rkd_zc iv_yzid ----- ZDA iv_djbh ---- KPD00014712 销售订单下传下去后直接转历史表 select * from INTERFACE_OUT_SALE_M t where djbh like %XSGYMA00220297%日志表查询结果ORA-01400: 无法将 NULL 插入 ("WMS…

yyblog2.0 数据库开发规范

一、基础规范 &#xff08;1&#xff09;必须使用InnoDB存储引擎 解读&#xff1a;支持事务、行级锁、并发性能更好、CPU及内存缓存页优化使得资源利用率更高 &#xff08;2&#xff09;表字符集默认使用utf8&#xff0c;必要时候使用utf8mb4 解读&#xff1a;1、通用&#xff…

word2016 语法检查_如何改进Microsoft Word的语法检查器

word2016 语法检查Microsoft Word comes with a powerful grammar checker, but many of its advanced grammar detection features are disabled by default. Grammarly is popular, but you don’t need it to add grammar checking to Word. Word itself contains a free al…

linux服务器硬件监控,Linux服务器实时监控加载硬件信息

Linux服务器监控之实时监控加载硬件信息Linux负有盛名的特点之一是其非凡的稳定性。然而&#xff0c;如果您的硬件有缺陷或配置不正确&#xff0c;即使是世界上最稳定的操作系统也不会对您有什么帮助。计算机系统是由软件系统硬件系统组成的&#xff0c;检测硬件状态对于保障整…