我对 NHibernate 有很大的疑问。我有从 Table1 到 Table2 的引用,并且我希望 NHibernate 在 Table2 中找不到相应记录时,不要针对 Table2 发出 SELECT 语句,我不知道,要确保它实际上不在那里。
我尝试过添加修饰符,例如.LazyLoad(Laziness.False)
and .NotFound.Ignore()
参考我的参考,但是 NHibernate 带着极端的偏见愉快地忽略了我的命令,发出它的 select 并破坏了我的代码。
NHibernate 尝试加载“不存在”是正确的。它must去做。
如此处所述Ayende - NHibernate 映射 http://ayende.com/blog/3938/nhibernate-mapping-many-to-one(摘录):
12) 未找到是另一个legacy功能,它控制 NHibernate 如何
当它发现无效的外键时的行为。也就是说,一个值
指向一个不存在的实体。默认情况下,这会触发
错误,因为这通常表明数据库有问题,但是
对于旧数据库,您可以告诉它将属性值设置为
改为 null。
可以在这里找到:使用 Ignore.NotFound 延迟加载 NHibernate https://stackoverflow.com/a/5666325/1679310(摘录):
当您指定 .NotFound().Ignore() 时,这会强制实体
急切加载并且不能用 .LazyLoad() 覆盖。
NHibernate 这样做是因为它必须确保这种关系
存在或不存在,因为您不依赖数据库来
强制执行这一点。
和这里为什么 Nhibernate 不会延迟加载我的多对一关系? https://groups.google.com/forum/#!topic/nhusers/yT3Peh8bA_Q,何塞·F·罗马尼洛 说:
这是你的问题,nhibernate必须确定,发票
每个注册存在或不存在。
我强烈建议您解决数据问题并删除
not-found=“忽略”属性。这是一件坏事。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)