我对 NHibernate 有很大的问题。我有一个从 Table1 到 Table2 的引用,并且我希望 NHibernate 在 Table2 中找不到相应记录时,不要再针对 Table2 发出 SELECT 语句,我不知道,真的要确保它实际上不在那里。
我已经尝试在我的参考中添加类似.LazyLoad(Laziness.False)
and的修饰符.NotFound.Ignore()
,但是 NHibernate 以极大的偏见愉快地忽略了我的命令,发出它的选择并破坏了我的代码。
我对 NHibernate 有很大的问题。我有一个从 Table1 到 Table2 的引用,并且我希望 NHibernate 在 Table2 中找不到相应记录时,不要再针对 Table2 发出 SELECT 语句,我不知道,真的要确保它实际上不在那里。
我已经尝试在我的参考中添加类似.LazyLoad(Laziness.False)
and的修饰符.NotFound.Ignore()
,但是 NHibernate 以极大的偏见愉快地忽略了我的命令,发出它的选择并破坏了我的代码。
这是正确的,NHibernate 尝试加载“不存在”。它必须这样做。
如此处所述Ayende - NHibernate 映射(摘录):
12) not-found 是另一个遗留特性,它控制 NHibernate 在发现无效外键时的行为。也就是说,一个指向不存在的实体的值。默认情况下,这会触发错误,因为这通常表明数据库存在问题,但是对于旧数据库,您可以告诉它将属性值设置为 null。
可以在这里找到:Lazy loading for NHibernate with Ignore.NotFound (an extract):
当您指定 .NotFound().Ignore() 时,这会强制实体被急切加载,并且不能被 .LazyLoad() 覆盖。NHibernate 这样做是因为它必须确保关系存在或不存在,因为您不依赖数据库来强制执行此操作。
在这里,为什么 Nhibernate 不会延迟加载我的多对一关系?,何塞·F·罗曼尼洛 说:
这是您的问题,nhibernate 必须确定,发票是否存在或不存在每个注册。
我强烈建议您解决数据问题并删除 not-found="ignore" 属性。这是一件坏事。
尝试
.Not.LazyLoad();
而不是 .LazyLoad(laziness.false);