1

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

我已经尝试在我的参考中添加类似.LazyLoad(Laziness.False)and的修饰符.NotFound.Ignore(),但是 NHibernate 以极大的偏见愉快地忽略了我的命令,发出它的选择并破坏了我的代码。

4

2 回答 2

4

这是正确的,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" 属性。这是一件坏事。

于 2013-09-06T07:56:39.770 回答
0

尝试

.Not.LazyLoad(); 

而不是 .LazyLoad(laziness.false);

于 2013-09-06T07:57:12.053 回答