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

如何在NHibernate中禁用自动加载?,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,这个问题可能与这个问题重复: 我想知道是否有办法告诉nhibernate不要加载子集合(最好是使用fluent nhibernate),除非我通过查询手动加载(保留所有映射!) 问题是,即使关闭延迟加载,集合也会自动加载。除非在查询中指定fetchmode,否则不加载集合 正如您从链接的问题和答案中所看到的,您可以通过使关系单向化来实现这一点。因此,我不想直接回答“如何”,而是想问为什么,希望得到一个更好的“如何” 我完全明白为什么您不希望总是急切地获取集合,这就是为什么NHibernate有

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

我想知道是否有办法告诉nhibernate不要加载子集合(最好是使用fluent nhibernate),除非我通过查询手动加载(保留所有映射!)


问题是,即使关闭延迟加载,集合也会自动加载。除非在查询中指定fetchmode,否则不加载集合

正如您从链接的问题和答案中所看到的,您可以通过使关系单向化来实现这一点。因此,我不想直接回答“如何”,而是想问为什么,希望得到一个更好的“如何”

我完全明白为什么您不希望总是急切地获取集合,这就是为什么NHibernate有延迟加载(以及为什么NHibernate总是延迟加载集合,除非您预先获取)。NHibernate在您实际请求之前不会实际获取该集合。所以我的问题是,为什么您希望NHibernate在对其进行操作时不加载集合?访问实体上的子集合时,您希望NHibernate执行什么操作

更新:

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


因此,基本上是David Kemp对另一个问题的回答。

原因很简单,我想手动控制加载的内容和未加载的内容。我不想把查询隐藏到数据库中。另外,当我调试时,让实体被延迟加载是非常烦人的。如果我在未加载的集合上操作,则会出现null异常。