Nhibernate 异常:基础 {NHibernate.HibernateException} = {"illegal access to loading collection"}

Nhibernate exception: base {NHibernate.HibernateException} = {"illegal access to loading collection"}

我正在处理 NHibernate 异常:"base {NHibernate.HibernateException} = {"非法访问加载集合"}"

Table PatRef 是 Parent table。 Table PatCon 是 Sub table。 当我在调试模式下从 PatRef 检索数据到 PatCons 时,错误消息屏幕截图如下。

Nhibernate 数据映射截图如下。

Parent Table PatRef:

子 Table PatCon:

PatRefManagerProp.GetById的工具

每次我看到它都是由于在用于检索对象的 ISession 已被处置或不再存在时尝试访问延迟加载的集合引起的。

您可以通过使用 ISession.Lock(entity, LockMode.None).

将实体附加到另一个会话来解决此问题

请注意警告 - 您不能将临时实体附加到会话。

(顺便说一下,原始问题中的详细信息。+1)

由以下原因引起的问题:"a boolean field in your Project class may be marked as a varchar field in the database"。

我有一个数据库列 "ON_DIALYSIS" "VARCHAR2(1)",它在映射 class PatCon

中被映射为布尔值

public virtual bool OnDialysis { 得到{ return _onDialysis; } 设置 { _onDialysis = 值; } }

修改映射后(将布尔值改为字符串),一切都变漂亮了:-)

public 虚拟字符串 OnDialysis { 得到{ return _onDialysis; } 设置 { _onDialysis = 值; } }