我对NHibernate有一个很大的问题。我有一个从Table1到Table2的引用,我希望NHibernate在Table2中找不到相应的记录时,不要对Table2发出一个SELECT语句,我不知道,真的确实它确实不存在。
我尝试在我的引用中添加.LazyLoad(Laziness.False)
和.NotFound.Ignore()
等修饰符,但NHibernate在极端偏见中忽略了我的命令,发出了选择并破坏了我的代码。
答案 0 :(得分:4)
这是正确的,NHibernate试图加载“不存在”。 必须这样做。
如此处所述Ayende - NHibernate Mapping(摘录):
12)not-found是另一个遗产功能,它控制着NHibernate的方式 在找到无效的外键时表现。也就是说,一个值 指向不存在的实体。默认情况下,这会触发 错误,因为这通常表明数据库存在问题,但是 使用旧数据库,您可以告诉它将属性值设置为 相反。
在这里可以找到:Lazy loading for NHibernate with Ignore.NotFound(摘录):
当你指定.NotFound()时,忽略()会强制实体 急切加载,无法用.LazyLoad()覆盖。 NHibernate这样做是因为它必须确保这种关系 存在或不存在,因为您不依赖于数据库 执行此。
在这里Why Nhibernate won't lazy load my many-to-one relationship?,JoséF。Romaniello说:
这是你的问题,nhibernate必须要确定,那是一张发票 每个注册都存在或不存在。
我强烈建议您修复数据问题并删除 not-found =“忽略”属性。这是一件坏事。
答案 1 :(得分:0)
尝试
.Not.LazyLoad();
而不是.LazyLoad(laziness.false);