存储库模式和聚合根模式和实体框架

Sri*_*eti 3 .net entity-framework aggregateroot repository-pattern

我正在根据存储库模式,聚合根和工作单元来构建我的应用程序.我使用Entity Framework5作为ORM.

我处于这样一种情况:我不知道如何继续添加新的实体,这些实体是聚合根并且与非聚合根的实体具有外键关系.

我不确定我之前的陈述是否合理,但让我在这里举一个例子.

Db中的人员表(这是我的应用程序中的聚合根)

  1. 名称
  2. 地址第一行
  3. CountryID

国家表(这不是聚合根,因为我可能永远不需要独立查询它们)

  1. CountryID
  2. 国家的名字

在我的应用程序中,我有PersonsRepository,它实现了一个通用的Repository,其中T是一个Aggregate root.

现在,当我在代码中创建一个新人时,我需要将Country添加到Person对象的Navigation属性中.如果我创建一个新的国家对象并将其分配给Person的Country属性并尝试保存Person对象,则EF抛出错误.我无法查询Countries表,因为它不是我的Aggregate root.

嗯,这不是我的实际情况,但这是我想要克服的.我该怎么办?

我想到的一个想法是创建一个通用的只读存储库,用于查询数据库而不是修改它,这是一个好的方法,或者我做的有什么不对.

在此先感谢您的回复和阅读长篇文章.

jga*_*fin 5

聚合根不仅仅是您可能不需要直接查询的内容.根据您的推理,您将不得不多次创建同一个国家/地区,因为您无法查询该国家是否退出(即该国家/地区是一个需要Person存在的弱表).

简单地说,agreggate根是可以在没有其他任何东西的情况下识别的对象.没有人可能存在国家,而没有订单则无法识别订单行.您可能想阅读这篇文章:http://dddcommunity.org/library/vernon_2011

至于实体框架,请检查我的存储库/ uow的实现:http://blog.gauffin.org/2013/01/repository-pattern-done-right/