【发布时间】:2018-03-06 19:16:58
【问题描述】:
在使用 DDD 开发 Web 应用程序时,确保聚合的一致性非常重要。
我过去在一个 Web 应用程序(没有 DDD)上工作,我们尝试使用 Transactions 确保数据的一致性。所以,我们使用了 Serializable 事务级别,这对我们的团队来说是一场噩梦,因为我们的应用程序的性能太糟糕了,我们的用户报告了很多死锁问题。
现在我正在开发一个实现 DDD 原则的 Web 应用程序,我需要确保我们的聚合的一致性。
我在这里读到http://geekswithblogs.net/Optikal/archive/2013/04/07/152643.aspx,乐观并发/锁定是实现抛出分配版本或时间戳到我们的聚合以检查它的方法之一。
我的第一个问题是如何使用 C# 和实体框架结合 Sql Server 实现乐观并发,包括从头到尾的整个过程,以及如果我们以订单和行项目为例,该列/标志存储在哪里埃里克·埃文斯 (Eric Evans) 在他的书中给出了吗?
我的第二个问题是在竞争条件下确保聚合一致性的常用策略是什么?
我将不胜感激任何代码 sn-p 或参考。
【问题讨论】:
-
我最近一直在为同样的问题进行概念设计。我计划有一个全局版本计数器,它会在每次数据库写入时递增。并且还向所有表添加版本列,该列在行创建/修改时记录当前版本计数器。对行的每次修改都必须指定要修改的行的版本,并在版本不匹配时使事务失败。
-
@XiaoguoGe 在乐观锁定中你不使用事务
-
你仍然可以使用翻译但没有锁定。
标签: c# entity-framework domain-driven-design consistency aggregateroot