3

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

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

编辑:

例如,如果我有一个人作为根实体,并且该人具有名称、地址和 OwnedProperties。如果我想获取人员列表以便显示他们的姓名,我不需要每次调用存储库时都加载拥有的属性。相反,在另一个页面上,我可能想要显示 OwnedProperties 列表,但不希望其他信息与调用一起加载。除了创建一个没有该拥有属性的新人员对象之外,仅调用没有拥有属性实体的 Person 的简单方法是什么?

4

3 回答 3

1

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

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

于 2009-06-05T08:43:33.610 回答
1

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

  • 一次获取所有数据:急切加载
  • 访问时获取数据:延迟加载
于 2009-06-05T08:33:28.170 回答
0

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

于 2014-01-04T21:42:41.020 回答