【发布时间】:2011-09-06 07:17:30
【问题描述】:
我遇到了 NHibernate 默认获取行为的问题:
延迟获取
延迟获取让您决定在第一次命中数据库时加载了多少对象图,以及哪些 只有在首次访问关联时才应加载关联。 Lazy fetching 是一个基本概念 对象持久性和获得可接受性能的第一步。
定义来自:Nhibernate In Action,2008 年
问题:
例如,我有一个提交按钮,我点击了很多次。在服务器端,我通过导航对象图来检索对象,例如:
User us = new GetUserById(userId);
if (us.Address.Street != null)
一位用户在 DB Schema 上有一个地址。
第一次点击可以正常工作,但如果我更快地点击它会抛出异常: “无法初始化代理 - 没有会话。”休眠
这种行为有什么解决办法吗?
谢谢,
蒂托·莫赖斯
【问题讨论】:
-
关闭会话后访问延迟加载的属性时会引发此错误。也许你有一个竞争条件,一个点击操作关闭另一个点击操作的会话?
-
您需要更新问题以显示您如何管理打开/关闭会话。与之前的评论一样,这可能是解决您问题的关键。
标签: nhibernate session proxy initialization