Entity framework 如何使用实体框架对聚合进行建模?

Entity framework 如何使用实体框架对聚合进行建模?,entity-framework,domain-driven-design,aggregateroot,Entity Framework,Domain Driven Design,Aggregateroot,虽然我已经处理领域驱动设计(DDD)很长时间了,但我对实体框架(EF)还是比较陌生的,在Visual Studio中使用实体框架设计器时,我想到的一个问题是如何在EF中表示/建模聚合 遵循DDD最佳实践,实体应仅引用同一聚合中的其他实体(或值对象),而对其他实体的引用仅限于聚合的根实体(聚合根)。但是,我在EF中没有看到任何这些概念(即,所有实体都被同等对待,因此实体之间的引用没有限制) 因此,我在问:我是否遗漏了EF中的某些内容,或者它是否完全不知道聚合、聚合根和实体之间的引用?如果是后者,在

虽然我已经处理领域驱动设计(DDD)很长时间了,但我对实体框架(EF)还是比较陌生的,在Visual Studio中使用实体框架设计器时,我想到的一个问题是如何在EF中表示/建模聚合

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


因此,我在问:我是否遗漏了EF中的某些内容,或者它是否完全不知道聚合、聚合根和实体之间的引用?如果是后者,在使用实体框架时,您如何对聚合进行建模?

我认为DDD是另一个抽象级别,因此我的答案是默认情况下没有EF不遵循这些实践。由您对实体和存储库进行建模以遵循DDD。您将使用存储库来构建聚合根目录,其中包含仅与当前聚合根目录相关的已加载相关实体,并且您将使用域服务来处理不同的存储库。

我只想更正一个小细节(但非常重要):

您声明“实体应仅引用同一聚合中的其他实体(或值对象)”

当然,这可能有一些论点,但比DDD上至少一个资源的建议更严格:“应该允许聚合中的对象保存 引用其他聚合的根。”(“Avram&Marinescu的“快速领域驱动设计”)

致以最良好的祝愿,
Simon

你说得完全正确,很抱歉不清楚这一点。问题是,你如何保证Entity Framework不会更新对其他聚合根的引用(到达它们)?EF不得在同一事务中接触来自2个聚合的实体。