【发布时间】:2014-02-17 10:54:01
【问题描述】:
我正在为使用实体框架代码优先的聚合根的纯实现而苦苦挣扎。假设我们有一个标准的 Order 和 OrderItem 问题,后者是前者的孩子。我们需要在 Order 类中有一个 OrderItem 项的只读集合,这样我们就可以(通过设计)在它的聚合根(即 Order 类)中控制 OrderItems 的添加、删除或更新。
我们如何实现这个 OrderItem(s) 列表?这个列表需要是只读的,这样其他开发者就不会尝试在列表中手动添加 OrderItem(s),避免使用应该使用的方法。
我们如何在 EF Code First 中映射该集合?私有属性不可映射。
【问题讨论】:
-
可以映射私有成员:stackoverflow.com/a/13810766/861716
-
确实如此,但这几乎不是 DDD 解决方案。您在域类和底层持久性机制之间添加耦合。
-
硬道理是属于实体框架上下文的类模型是data layer in the first place。一切都必须优化以方便数据访问(虚拟成员、用于标识和外键的 Id 属性、双向关系、与数据库表非常相似的类)。我的观点是:你不能用 EF 类模型做 DDD,ORM 会以这样或那样的方式占用很大的空间。
-
@GertArnold 是的,看起来是这样。我同意你的看法。
标签: c# entity-framework domain-driven-design aggregateroot