【发布时间】:2011-06-26 13:36:25
【问题描述】:
我有一个关于 nHibernate 的非常简单的问题,但我在谷歌上找不到答案。
假设我有一个映射的Member 对象,该对象包含Mail 对象的1:n 外键。我想在用户进入收件箱时检索用户的当前邮件项目集合。如果我调用memberInstance.Mail(IList 类型),它会返回邮件集合,但不会反映添加的新邮件,因为 memberInstance 在登录期间保存在缓存中并且不会进行往返到数据库。如果我创建一个RetrieveMailForUser 方法,将它传递给一个成员实例,然后调用诸如Session.CreateCriteria<Mail> 之类的代码,我将获得任何给定成员的当前邮件以及所有内容,但是如果我从未在成员变量上拥有一个邮件集合似乎是无关紧要的使用它以及在成员 var 中拥有一个不是最新的集合。每次用户检查他的收件箱并将其保存到缓存时,我都可以刷新成员,但这似乎有很多开销。我觉得我缺少 nHibernate 的一些基本原理。请帮忙。谢谢!
调用成员的代码:
public static Member GetLoggedInUser()
{
var member = (Member) HttpContext.Current.Session[SESSION_NAME];
if(member != null &&
!NHibernateSessionManager.IsEntityAttachedToCurrentSession(member))
NHibernateSessionManager.AttachEntityToSession(member);
return member;
}
E
【问题讨论】:
-
您提到对集合的更改不会反映在缓存项目中。我相信您的问题出在那儿-当您从缓存中重新获取该项目时,您对对象所做的更改应该得到反映。您能否提供一些有关您如何初始检索成员对象并将其持久化的更多信息?
-
抱歉,它保存在 ASP 网络会话中而不是缓存中,我用检索用户的代码编辑了我的原始问题。
标签: c# asp.net nhibernate collections