2010-09-07 51 views
3

虽然我一直在处理领域驱动设计(DDD)相当长一段时间,但我对实体框架(EF)相对陌生,并且在Visual Studio中使用实体框架设计器时出现了一个令我想到的问题在EF中应该如何表示/模拟聚合体。如何使用实体框架为集合建模?

遵循DDD最佳实践,实体应仅引用同一聚合中的其他实体(或值对象),并且对其他实体的引用仅限于聚合的根实体(聚合根)。但是,我没有看到EF中存在任何这些概念(即,所有实体都被视为相同,因此对实体之间的引用没有任何限制)。

因此,我问:我是否错过了EF中的某些内容,或者它对于聚合,聚合根和实体之间的引用完全不可知?如果后者是这种情况,那么在使用Entity Framework时如何对Aggregate进行建模?

回答

2

我认为DDD是其他抽象层次,所以我的答案是默认情况下没有EF不遵循这些实践。您需要根据DDD为您的实体和存储库建模。您将使用存储库构建带有与当前聚合根相关的已加载相关实体的聚合根,并且您将使用域服务来处理不同的存储库。

+0

这就是我一直在怀疑,感谢确认! – angelwithagun 2010-09-08 08:00:31

1

我只是想纠正一个小的(但很重要的细节):

幽州“的实体,应只引用同一集合中的其他实体(或值对象)”。

当然,这可能有一些争论,但它比至少有一个DDD推荐的资源更严格:“聚合中的对象应该被允许保存 引用其他聚合的根。” (由Avram & Marinescu提供的“Domain-Driven Design Quick”)。

最好的问候,西蒙

+0

你是完全正确的,抱歉不清楚这件事。 – angelwithagun 2010-11-09 15:10:19

+0

问题是,你如何保证实体框架不会更新对其他聚合根的引用(到达它们)? EF不应该在同一个事务中触及2个聚合中的实体。 – SuperJMN 2014-10-15 21:23:15