做网站要以单位,wordpress网站类型,大型门户网站建设特点,小程序源码网网盘对于一个聚合来说#xff0c;它可能会被附加很多事件#xff0c;这里我们叫它领域事务#xff0c;因为一个聚会我们可以把它理解成一个领域#xff0c;一个业务。对于领域事件不清楚的同学可以看看我的这篇文章《DDD~领域事件与事件总线》#xff0c;里面有详细的说明它可能会被附加很多事件这里我们叫它领域事务因为一个聚会我们可以把它理解成一个领域一个业务。对于领域事件不清楚的同学可以看看我的这篇文章《DDD~领域事件与事件总线》里面有详细的说明今天主要说一下领域里的事务即领域事件的数据处理和主逻辑里的数据处理在同一事务里完成。 知识准备 环境使用TransactionScopeNoMsdtc事务它是占占开发的原理是将一批操作包裹到一个SqlConnection里由开发者维护接连的关闭这也是使用时要特别注意的地方因为如果不关闭连接链接池会益出。 环境使用微软自己的分布式事务实现TransactionScope它对于同一个上下文来说是不会被提升为分布式事务的这一点对要强很多。 代码实践 /// summary/// 添加WebSystem表时所需要的事件对象/// /summary[Serializable]public class WebSystemCreateEvent : EventBase{/// summary/// 数据上下文它与架构无关可以是Linq2Sql,EF,ADO.NET/// /summarypublic IUnitOfWork UnitOfWork { get; set; }/// summary/// 对象主键/// /summarypublic int ID { get; set; }} [HttpPost]public ActionResult WebSystem(FormCollection form){//订阅领域事件EventBus.Instance.SubscribeWebSystemCreateEvent(i {var entity1 new DbContextRepositoryWebSystem(i.UnitOfWork).Find(i.ID);entity1.WebSystemName entity1.WebSystemName 更新了;new DbContextRepositoryWebSystem(i.UnitOfWork).Update(entity1);});IUnitOfWork UnitOfWork new backgroundEntities1();var db new DbContextRepositoryWebSystem(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); 截图 TransactionScopeNoMsdtc截图 TransactionScope截图 本地网站服务器的为禁用状态 本文转自博客园张占岭仓储大叔的博客原文链接DDD~领域事件中使用分布式事务如需转载请自行联系原博主。