当有外键但引用的行不存在时,是否可以避免NHibernate.ObjectNotFoundException?

时间:2009-03-06 12:03:51

标签: nhibernate

我正在使用NHibernate从遗留数据库中提取一些数据,我发现有几个存在外键的情况,但引用的行已被删除。

当我进行NHibernate映射时(使用Fluent NHibernate如此:

References(d => d.Group)
    .WithColumns("groupId", "dataset")
    .SetAttribute("lazy", "true");

我在加载根对象时获得了Group的单位化代理,当我尝试使用它时,我获得了ObjectNotFoundException

如果我禁用延迟加载,则在加载根时会立即得到ObjectNotFoundException

因此:有没有办法让NHibernate在加载root时使Group为空?或者是否可以以某种方式检查单元化代理,以查看它是否会成功加载行?

4 个答案:

答案 0 :(得分:16)

我找到了解决方案here - 我需要添加

.SetAttribute("not-found", "ignore");

到映射。

答案 1 :(得分:2)

答案 2 :(得分:2)

您是否确认您的引用属性仍在懒散加载?为了让NHibernate懒惰地加载引用,需要确保引用是NOT NULL。当你设置not-found =“ignore”时,你间接告诉NHibernate有可能引用可能不存在,从而阻止NOT NULL约束有效。如上所述,您不会遇到错误,但您可能会急切地呼叫数据库以加载您的组。

答案 3 :(得分:0)

在应用程序上我正在设置

lazy="proxy" 

解决了这个问题。