NHibernate防止延迟加载不匹配的引用

本文关键字:引用 不匹配 延迟加载 NHibernate | 更新日期: 2023-09-27 18:30:27

我对NHibernate有相当大的问题。我有一个从表1到表2的引用,我希望NHibernate,当在表2中找不到相应的记录时,不要对表2发出SELECT语句,我不知道,真正确定它实际上不存在。

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

NHibernate防止延迟加载不匹配的引用

NHibernate尝试加载"不存在"是正确的。它必须这样做。

正如这里所说 Ayende - NHibernate 映射(摘录):

12)未找到是另一个遗留功能,它控制NHibernate如何 在找到无效外键时的行为。也就是说,一个值 指向不存在的实体。默认情况下,这将触发 错误,因为这通常表示数据库有问题,但是 使用旧数据库,可以告诉它将属性值设置为 改为空。

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

指定 .NotFound()。忽略() 这会强制实体 急切加载,不能用 .LazyLoad(). NHibernate这样做是因为它必须确保这种关系 存在或不存在,因为您不依赖数据库 强制执行这一点。

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

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

我强烈建议您解决数据问题并删除 not-found="ignore" 属性。这是一件坏事。

尝试

.Not.LazyLoad(); 

而不是。LazyLoad(laziness.false);