聚合根和实体框架

时间:2014-02-17 10:54:02

标签: c# entity-framework domain-driven-design aggregateroot

我正在努力使用Entity Framework Code First纯粹实现Aggregate root。假设我们有Order和OrderItem的标准问题,后者是前者的孩子。我们需要在Order类中有一个只读的OrderItem项集合,这样我们就可以(按设计)控制OrderItems在其聚合根中的添加,删除或更新(即Order类)。

  1. 我们如何实现OrderItem的这个列表?此列表必须是只读的,以便其他开发人员不会尝试手动在列表中添加OrderItem,从而避免使用应该使用的方法。

  2. 我们如何在EF Code First中映射该集合?私有财产不可映射。

1 个答案:

答案 0 :(得分:1)

  
      
  1. 我们如何实现OrderItem的这个列表?此列表必须是只读的,以便其他开发人员不要尝试手动在列表中添加OrderItem,从而避免使用应该使用的方法。
  2.   

只读列表不会阻止其他开发人员添加和删除项目。它只会阻止它们更改OrderItems的引用指针。

你可以做的是将列表设为私有,并在Order上有一个方法AddItem,RemoveItem和UpdateItem以及列表的IEnumerable getter用于迭代目的。

  
      
  1. 我们如何在EF Code First中映射该集合?私有财产不可映射。
  2.   

我从未使用EF,但之前已经完成了一些DDD,为您的应用程序和逻辑提供一组实体,真正的域模型以及另一组实体对您来说很有用数据访问框架,在本例中为EF。并使用类似AutoMapper的东西从您的EF实体映射到您的域实体。

您不必总是拥有两组实体,但对于那些有问题的实体,请使实体EF想要,并且只需添加从对象到对象的额外映射步骤。