我正在使用NHibernate从遗留数据库中提取一些数据,我发现有几个存在外键的情况,但引用的行已被删除。
当我进行NHibernate映射时(使用Fluent NHibernate如此:
References(d => d.Group)
.WithColumns("groupId", "dataset")
.SetAttribute("lazy", "true");
我在加载根对象时获得了Group
的单位化代理,当我尝试使用它时,我获得了ObjectNotFoundException
。
如果我禁用延迟加载,则在加载根时会立即得到ObjectNotFoundException
。
因此:有没有办法让NHibernate在加载root时使Group
为空?或者是否可以以某种方式检查单元化代理,以查看它是否会成功加载行?
答案 0 :(得分:16)
答案 1 :(得分:2)
答案 2 :(得分:2)
您是否确认您的引用属性仍在懒散加载?为了让NHibernate懒惰地加载引用,需要确保引用是NOT NULL。当你设置not-found =“ignore”时,你间接告诉NHibernate有可能引用可能不存在,从而阻止NOT NULL约束有效。如上所述,您不会遇到错误,但您可能会急切地呼叫数据库以加载您的组。
答案 3 :(得分:0)
在应用程序上我正在设置
lazy="proxy"
解决了这个问题。