我在使用Entity Framework Code First实现聚合根时遇到了困难。假设我们有一个标准问题,即订单和订单项,后者是前者的子级。我们需要在订单类中拥有一个只读订单项集合,以便我们可以(按设计)控制其聚合根(即订单类)中订单项的添加、删除或更新。
我们如何实现这个订单项列表?这个列表需要是只读的,以防其他开发人员手动向列表中添加订单项,而忽略应该使用的方法。
我们如何在EF Code First中映射该集合?私有属性是不可映射的。
我在使用Entity Framework Code First实现聚合根时遇到了困难。假设我们有一个标准问题,即订单和订单项,后者是前者的子级。我们需要在订单类中拥有一个只读订单项集合,以便我们可以(按设计)控制其聚合根(即订单类)中订单项的添加、删除或更新。
我们如何实现这个订单项列表?这个列表需要是只读的,以防其他开发人员手动向列表中添加订单项,而忽略应该使用的方法。
我们如何在EF Code First中映射该集合?私有属性是不可映射的。
- 我们如何实现这个OrderItem(s)列表?这个列表需要是只读的,以便其他开发人员不会试图手动在列表中添加OrderItem(s),从而避免应该使用的方法。
一个只读的列表并不能阻止其他开发人员向其中添加或删除项目。它只能防止他们更改OrderItems的引用指针。
您可以将列表设为私有,并在Order上提供AddItem、RemoveItem和UpdateItem方法,以及一个IEnumerable getter用于迭代目的。
- 我们如何在EF Code First中映射集合?私有属性无法映射。
我从未使用过EF,但我之前做过一些DDD,对于应用程序和逻辑的真正领域模型,以及数据访问框架的另一组实体(即EF),将其分为两个实体集非常有用。然后使用像AutoMapper这样的东西将EF实体映射到领域实体。
您并不总是必须使用两个实体集,但对于像这样有问题的情况,创建EF想要的实体,然后添加额外的从对象到对象的映射步骤。