是否可以在打开的 session 期间延迟加载相关对象,但在 session 关闭后仍然有相关对象可用?
例如,我们有一个 USER 类和一个相关的 ROLE 类。当我们加载一个 USER 时,我们也会延迟加载相关的 ROLE 对象。我们能否让 USER 和 ROLE 类在 session 关闭后完全加载并可用?
这个功能可行吗?
最佳答案
简短的回答:没有。在 session 关闭之后,您必须在关闭 session 之前初始化任何您需要的东西。用于强制加载惰性代理(不枚举它)的方法是 NHibernateUtil.Initialize(USER.ROLES)
。
长答案...有点。可以将对象“重新附加”到新 session ,从而允许初始化 PersistentBags 和其他 NH 代理。如果您知道该对象存在于数据库中但不存在于您的新 session 中,并且您还没有修改它,最好使用的方法是 Session.Lock(USER, LockMode.None)
。这会将对象与新 session 相关联,而无需告诉 NHibernate 对对象的读取或写入做任何事情。
但是,请注意这是一种代码味道。如果您定期将对象重新附加到新 session ,则表明您没有让 session 保持足够长的时间。例如,为每个窗口窗体打开一个 session 并在窗体打开时保持打开状态是没有问题的,前提是您在窗口关闭时将其关闭。
关于c# - NHibernate 延迟加载 - session 关闭后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4505679/