如何正确引用聚合集合?

问题描述 投票:0回答:1

使用DDD,实体和聚合之间存在区别。在EFCore中,我很高兴使用私有集合并使用规范模式在需要时填充子实体。同样,Julie Lerman和其他人撰写了关于适应EF for DDD的非常好的文章。

与实体相对的Aggregate可以/应该只保存对另一个Aggregate的Id引用,而不是导航属性,我们可以使用它来通过GetById()调用通过它的Repository撤回。

更重要的是确定聚合如何能够保存聚合集合的Id引用集合以及如何使用Entity Framework实现这一点?

通常,您可以使用导航属性和外键进行设置。

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

但是,我正在寻找与DDD保持一致的是。

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

我不想要的是Bar聚合知道它与Foo有关系,因为它可以被许多其他聚合引用。

是否可能无法在Aggregate上拥有聚合ID集合?

entity-framework-core domain-driven-design
1个回答
1
投票

如何正确引用聚合集合?

您通过其ID引用聚合。因此,您通过一组ID引用聚合集合(每个id引用一个聚合)。

Aggregate如何保存对另一个Aggregate的Id引用

这很简单:另一个聚合的id是聚合中包含引用的字段。

如何通过Entity Framework实现这一目标?

我不知道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 );
© www.soinside.com 2019 - 2024. All rights reserved.