2009-04-16 51 views
3

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

如何通过根访问实体对象,而无需每次加载所有关联的对象,如果我禁用linq的lazyloading功能?

编辑:

例如,如果我有一个人的根实体,并且人有姓名,地址和OwnedProperties。如果我想获得人员列表,以便我可以显示他们的名字,我不会永远想每次调用存储库时加载拥有的属性。相反,在另一个页面上,我可能想要显示一个OwnedProperties列表,但不希望其他信息随呼叫加载。只是在没有拥有财产实体的情况下调用个人而不是创建没有拥有财产的新个人对象的简单方法是什么?

+0

你能提供一个具体的例子吗? – 2009-04-16 23:06:58

+0

可能不是。 DDD是那些没有实际例子的含糊原则之一。 – cletus 2009-04-16 23:10:37

回答

1

我不认为这是可能的,没有延迟加载。

  • 获得一次所有数据:预先加载
  • 获取数据访问时:延迟加载
1

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

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

相关问题