我正在处理一个NHibernate异常:“base {NHibernate.HibernateException} = {”非法访问loading collection“}”
表PatRef是父表。 表PatCon是Sub表。 当我在debuging模式下从PatRef检索数据到PatCons时,错误消息屏幕截图如下。
Nhibernate数据映射截图如下。
父表PatRef:
子表PatCon:
PatRefManagerProp.GetById的工具
答案 0 :(得分:1)
任何时候我都看到这是因为当用于检索对象的ISession
被处置或不再存在时,尝试访问延迟加载的集合。
您可以使用ISession.Lock(entity, LockMode.None)
将实体附加到其他会话来解决此问题。
只是注意警告 - 您无法将临时实体附加到会话。
(顺便提一下原始问题的细节.1 +)
答案 1 :(得分:1)
由以下原因引起的问题:“Project类中的布尔字段可能会在数据库中标记为varchar字段”。
我有一个数据库列“ON_DIALYSIS”“VARCHAR2(1)”,它在映射类PatCon中映射为bool
public virtual bool OnDialysis { 得到{return _onDialysis; } 设置{_onDialysis = value; } }
修复映射后(将bool更改为字符串),一切都变得美丽: - )
公共虚拟字符串OnDialysis { 得到{return _onDialysis; } 设置{_onDialysis = value; } }