对于一个聚合来说,它可能会被附加很多事件,这里我们叫它领域事务,因为一个聚会我们可以把它理解成一个领域,一个业务。对于领域事件不清楚的同学可以看看我的这篇文章《DDD~领域事件与事件总线》,里面有详细的说明,今天主要说一下领域里的事务,即领域事件的数据处理和主逻辑里的数据处理在同一事务里完成。
知识准备
SQL2005环境使用TransactionScopeNoMsdtc事务,它是占占开发的,原理是将一批操作包裹到一个SqlConnection里,由开发者维护接连的关闭,这也是使用时要特别注意的地方,因为如果不关闭连接,SQL链接池会益出。
SQL2008环境使用微软自己的分布式事务实现TransactionScope,它对于同一个上下文来说,是不会被提升为分布式事务的,这一点对SQL2005要强很多。
代码实践
///
/// 添加WebSystem表时,所需要的事件对象
///
[Serializable]
public class WebSystemCreateEvent : EventBase
{
///
/// 数据上下文,它与架构无关,可以是Linq2Sql,EF,ADO.NET
///
public IUnitOfWork UnitOfWork { get; set; }
///
/// 对象主键
///
public int ID { get; set; }
}
[HttpPost]
public ActionResult WebSystem(FormCollection form)
{
//订阅领域事件
EventBus.Instance.Subscribe(i =>
{
var entity1 = new DbContextRepository(i.UnitOfWork).Find(i.ID);
entity1.WebSystemName = entity1.WebSystemName + "更新了";
new DbContextRepository(i.UnitOfWork).Update(entity1);
});
IUnitOfWork UnitOfWork = new backgroundEntities1();
var db = new DbContextRepository(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为禁用状态
aaarticlea/png;base64,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" alt="" />
ABP在领域事件中异步调用方法抛异常
在领域事件中调用UserRegistrationManager.RegisterAsync抛异常 Call UserRegistrationManager.RegisterAsync() throw ...
DDD领域事件与事件总线源码下载
最近在看领域事件的文章.看到了“张占岭”的 原文地址:http://www.cnblogs.com/lori/p/3476703.html 遗憾的是没有提供下 ...
DDD~领域事件应用篇(订单处理变得更清晰)
回到目录 上一讲主要说了领域事件和领域总线,这并不是一个很容易理解的文章,所以本讲实例篇主要是为了补充上一讲的理论知识,本讲实例关注的是实际中的订单处理模块,我们知道,订单处理是电子商务的核心,往往在 ...
SpringBoot多数据源中的分布式事务
虽然现在微服务越来越流行,我们的系统随之也拆分出来好多的模块功能.这样做的目的其实就是为了弥补单体架构中存在的不足.随着微服务的拆分,肯定设计到分库分表,但这之中肯定设计到分布式事务.最典型的例子就是 ...
DDD~领域事件与事件总线
回到目录 谈谈它 终于有些眉目了,搜刮了很多牛人的资料,英文的,中文的,民国文的,终于小有成就了,同时也做了个DEMO,领域事件这东西好,但需要你明白它之后才会说好,而对于明白领域事件这件事来说,它的 ...
Sql Server中启用分布式事务小结
1.web服务器与数据库服务器同时启动msdtc服务 2. 2台服务器做出如下配置: 控制面板->管理工具->组件服务->计算机->我的电脑->本地DTC .Net示例: ...
.NET Core 事件总线,分布式事务解决方案:CAP
背景 相信前面几篇关于微服务的文章也介绍了那么多了,在构建微服务的过程中确实需要这么一个东西,即便不是在构建微服务,那么在构建分布式应用的过程中也会遇到分布式事务的问题,那么 CAP 就是在这样的背景 ...
.NET Core 事件总线,分布式事务解决方案:CAP 基于Kafka
背景 相信前面几篇关于微服务的文章也介绍了那么多了,在构建微服务的过程中确实需要这么一个东西,即便不是在构建微服务,那么在构建分布式应用的过程中也会遇到分布式事务的问题,那么 CAP 就是在这样的背景 ...
【转】.NET Core 事件总线,分布式事务解决方案:CAP
[转].NET Core 事件总线,分布式事务解决方案:CAP 背景 相信前面几篇关于微服务的文章也介绍了那么多了,在构建微服务的过程中确实需要这么一个东西,即便不是在构建微服务,那么在构建分布式应用 ...
随机推荐
perl 删除过期文件
#!/usr/bin/perl `find /bak/ >list.txt`; open LIST,"/root/list.txt"; while ( ...
Java SE、Java EE、Java ME
Java SE(Java Platform,Standard Edition).Java SE 以前称为 J2SE.它允许开发和部署在桌面.服务器.嵌入式环境和实时环境中使用的 Java 应用程序.J ...
Java事务处理全解析(四)—— 成功的案例(自己实现一个线程安全的TransactionManager)
在本系列的上一篇文章中我们讲到,要实现在同一个事务中使用相同的Connection对象,我们可以通过传递Connection对象的方式达到共享的目的,但是这种做法是丑陋的.在本篇文章中,我们将引入另外 ...
Redis操作+python
自动化接口测试中需要向redis中插入测试数据: 1. 连接redis: import redisself.r = redis.StrictRedis(host=env.REDIS_HOST, por ...
asp开发微信扫码支付
这个任务已经给了.现在正在学习开发中.主要注意的是2点. 1:返回参数的验证. 2:通知后业务处理和处理后返回财付通.大部分操作,api中已经处理好. 现在需要的业务逻辑部分. 需要正确3个参数 r ...
js四舍五入
7-13 向上取整ceil() 7-14 向下取整floor() 7-15 四舍五入round() 7-16 随机数 random()
View以自身中心旋转的代码解惑
matrix.preTranslate(-centerX, -centerY); matrix.postTranslate(centerX, centerY); 经常在中心旋转的应用中看到这段代码. ...
javascript 生成页面轮播元素
优化Java堆大小5温馨提示
总结:Java没有足够的堆大小可能会导致性能非常大的影响,这无疑将给予必要的程序,并不能带来麻烦.本文总结了影响Java居前五位的能力不足,并整齐地叠优化? 笔者Pierre有一个10高级系统架构师有 ...
day 15递归 匿名函数
三元表达式 目的是简化书写 局限性:三元表达式智能简化仅有两个分支的if判断,而且这个判断无论是否成立都必须要返回值 res = True if age >=18 else False 递归: ...