如何在NHibernate中禁用自动加载?

时间:2009-06-05 21:14:04

标签: nhibernate fluent-nhibernate

这个问题可能与此问题重复:

nhibernate - disable automatic\lazy loading of child records for one to many relationsihps

我想知道是否有任何方法可以告诉nhibernate不加载子集合(最好是使用流畅的Nhibernate),除非我手动使用查询(保留所有映射!)。

问题是即使关闭延迟加载,集合也会自动加载。我希望没有加载任何集合,除非我在查询中指定了一个fetchmode。

1 个答案:

答案 0 :(得分:1)

正如您从链接的问题和答案中看到的那样,您可以通过使关系单向化来实现这一目标。因此,我不会直接回答如何,而是要求为什么希望能够获得更好的“如何”。

我绝对明白为什么你不会总是急需获取集合,这就是NHibernate延迟加载的原因(以及为什么NHibernate总是懒得加载集合,除非你预先获取)。在您真正要求它之前,NHibernate实际上不会获取该集合。所以我的问题是为什么你希望NHibernate在你操作时不加载集合?当您访问实体上的子集合时,您希望NHibernate做什么?

<强>更新

你没有真正回答我为什么(也许我只是顽固)的问题,但很好,你想控制。那么让NH无法完成工作的最简单方法就是不要让它首先这样做(即不要映射它)。也就是说,不要映射关系的“多”(集合)结束。您仍然可以将该集合保留在您的类中,但只要您没有告诉NHibernate通过将其添加到您的映射文件来填充它,它就永远不会。然后,您可以在某处添加PopulateCollection方法来运行NH查询并将结果存储在该集合中。你失去了NHibernate为集合提供的所有好语义,因为它无法跟踪它的变化;你必须实现自己的添加和删除方法。

所以,基本上David Kemp对另一个问题的回答。