在不进行延迟加载的情况下访问聚合实体

时间:2009-04-16 22:57:32

标签: domain-driven-design lazy-loading entities

我想遵循DDD理念,而不是直接访问聚合的实体对象。所以,我必须调用根对象来获取关联的实体。但在其他情况下,我并不总是希望在调用root时加载每个关联的实体。这是延迟加载的目的吗?

如果我禁用linq的延迟加载功能,如何通过root访问实体对象而不是每次都加载所有关联的对象?

编辑:

例如,如果我有一个Person作为根实体,并且Person具有Name,Addresses和OwnedProperties。如果我想得到一个人员列表以便我可以显示他们的名字,我不希望每次在调用存储库时加载拥有的属性。相反,在另一个页面上,我可能希望显示OwnedProperties列表,但不希望其他信息加载该调用。除了创建没有拥有属性的新person对象之外,只调用Person而没有拥有属性实体的简单方法是什么?

3 个答案:

答案 0 :(得分:1)

如果没有延迟加载,我认为不可能。

  • 一次获取所有数据:Eager Loading
  • 访问时获取数据:延迟加载

答案 1 :(得分:1)

根据你的编辑: 我在这些情况下做的是创建一个'View'类或'DTO'类,它只包含我感兴趣的属性。 例如,我可以有一个'PersonView'类,它只有一个Name属性。

然后,使用我的OR / M映射器(我使用NHibernate),我创建了一个HQL查询(或Criteria查询),它可以在我的'Person'实体上运行。在我执行查询之前,我告诉NHibernate我想要'PersonView'对象作为结果(我指定了一个投影)。然后,NHibernate足够聪明,可以执行只检索填充PersonView实例所必需的列的查询。

答案 2 :(得分:0)

避免延迟加载的一种方法是使用对象'id'