c# - NHibernate 延迟加载 - session 关闭后

标签 c# nhibernate session lazy-loading

是否可以在打开的 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/

相关文章:

c# - MongoDB InsertMany与BulkWrite

c# - 使用调试 Visual Studio 代码的 Dotnet 监视

c# - CQRS、Wpf + UI 刷新

javascript - 如何踢用户 session ? [ Node .js]

PHP session cookie 在浏览器关闭时过期

c# - 编译器接受抛出 NullReferenceException 的几乎对象初始化器

c# - 查找集合的 NHibernate 映射(如果这有意义的话)

c# - Linq 投影在 NHibernate 3.2 中被错误缓存

asp.net-mvc-3 - 尝试根据 Orchard (NHibernate) 中的枚举保存复选框选择

php - CakePHP - 保存一个 session 变量会删除另一个