NHibernate Prevent Lazy加载无与伦比的引用

时间:2013-09-06 07:41:38

标签: c# nhibernate fluent-nhibernate fluent-nhibernate-mapping

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

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

2 个答案:

答案 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);