【发布时间】:2017-06-22 22:14:08
【问题描述】:
我对 NHibernate 有很大的问题。我有从 Table1 到 Table2 的引用,并且我希望 NHibernate 能够,当在 Table2 中找不到相应的记录时,不要再针对 Table2 发出 SELECT 语句,我不知道,真的要确保它实际上不在那里。
我尝试在我的引用中添加.LazyLoad(Laziness.False) 和.NotFound.Ignore() 之类的修饰符,但NHibernate 以极大的偏见愉快地忽略了我的命令,发出它的选择并破坏了我的代码。
【问题讨论】:
-
我不明白...如果不发出 SELECT 来检查它,NHibernate 怎么知道该记录不存在?
-
检查 Left Join 是否返回 NULL id,我只能想象它的作用,因为它仅在 JOIN 返回为空时才发出 SELECT,而不是留下足够好的单独。跨度>
-
NH 不缓存对象的存在。它不会缓存不存在的对象。水合过程(对象实例化)甚至必须从不包含引用表的底层结果集中工作。
-
Ignore只是容忍无效外键值的拐杖。但问题的根源在于无效的外键值。将它们保存在数据库中会暴露出像您这样的问题。现在,如果你可以contribute 一个 PR 来避免这些选择,也许它会被接受。但由于这看起来像是对低使用率功能的优化,如果该 PR 影响很大,它可能不会被接受。
标签: c# nhibernate fluent-nhibernate fluent-nhibernate-mapping