NHibernate Prevent Lazy加载无与伦比的引用

我对NHibernate有一个很大的问题。 我有一个从Table1到Table2的引用,我希望NHibernate在表2中找不到相应的记录时,不要对Table2发出一个SELECT语句,我不知道,真的确实它确实不在那里。

我尝试将修饰符如.LazyLoad(Laziness.False).NotFound.Ignore()到我的引用中,但NHibernate在极端偏见中忽略了我的命令,发出了select并破坏了我的代码。

这是正确的,NHibernate试图加载“不存在”。 它必须这样做。

如上所述Ayende – NHibernate Mapping (摘录):

12)not-found是另一个遗留特性,它控制NHibernate在找到无效外键时的行为方式。 也就是说,指向不存在的实体的值。 默认情况下,这会触发错误,因为这通常表示数据库存在问题,但对于旧数据库,您可以告诉它将属性值设置为null。

正如可以在这里找到的: 使用Ignore.NotFound (提取) 延迟加载NHibernate :

当你指定.NotFound()。Ignore()时,这会强制加载实体,并且不能用.LazyLoad()覆盖。 NHibernate这样做是因为它必须确保关系存在或不存在,因为您不依赖于数据库来强制执行此操作。

在这里为什么Nhibernate不会懒惰加载我的多对一关系? ,JoséF。Romaniello说:

这是你的问题,nhibernate必须确保每个注册都有一个发票EXIST或不存在。

我强烈建议您修复数据问题并删除not-found =“ignore”属性。 这是一件坏事。

尝试

 .Not.LazyLoad(); 

而不是.LazyLoad(laziness.false);