如何正确引用集合集合?

时间:2019-03-14 14:25:02

标签: entity-framework-core domain-driven-design

使用DDD时,实体与集合之间是有区别的。在EFCore中,我对使用私有集合并在需要时使用规范模式填充子实体的方法感到满意。同样,朱莉·勒曼(Julie Lerman)和其他人也写了非常好的文章,介绍了将EF应用于DDD。

与实体相反,聚合只能(应该)保留对另一个聚合的ID引用,而不是导航属性,而导航属性可以通过GetById()调用通过其存储库进行拉回。

更多的问题是确定聚合如何保存对聚合集合的Id引用的集合,以及如何使用实体框架实现这一点?

通常,您需要使用导航属性和外键对其进行设置。

public Class Foo
(
  public List<Bar> Bars { get; set; }
)

但是,我希望与DDD保持一致。

public Class Foo
(
  public List<int> BarIds { get; set; }
)

我不想拥有Bar聚合,因为它知道与Foo的关系,因为许多其他聚合可能会引用它。

也许是您无法在一个聚合中收集一个聚合ID的情况?

1 个答案:

答案 0 :(得分:1)

  

如何正确引用聚合集合?

您通过ID引用聚合。因此,您通过一组ID引用了一组聚合(每个ID都引用了一个聚合)。

  

集合如何保存对另一个集合的ID引用

很简单:另一个聚合的ID是聚合中保存引用的字段。

  

如何使用实体框架实现这一目标?

我不知道EF,但是聚合包含ID引用的方式与聚合其他任何字段相同。

我不知道挣扎的原因。

假设您有2个汇总:Foo和Bar,以便Foo引用Bar(Foo ==> Bar)。如果Foo的客户想要获得Foo实例引用的Bar实例:

String aFooId = ...
Foo aFoo = fooRepository.getById ( aFooId );
String aBarId = aFoo.barId();
Bar aBar = barRepository.getById ( aBarId );