如果我有一个User对象,其中包含当前使用NHibernate进行级联更新的UserPhoto对象集合。因此,您保存用户对象,并保存所有UserPhoto。
有没有办法只需保存UserPhoto就可以上传新的UserPhoto,而无需保存整个用户对象的层次结构?
我试过了
userPhoto.User = user; // to set the parent object which will provide the UserPhoto with the correct UserId when saving it
session.Save(userPhoto);
使用正确的UserId可以保存数据库中的行,但是如果我那么
session.Get<User>(userId)
它不包含新照片。我猜测NHibernate最初缓存用户对象,当我在代码中得到它时,然后我在数据库级别添加userphoto但NHibernate缓存仍然包含较早的User对象,它没有引用新照片,而我需要在添加新照片后刷新该用户对象的NHibernate缓存。这是正确的,我该如何刷新?我正确使用NHibernate吗?
由于
答案 0 :(得分:1)
NHibernate ISession有一级缓存或实体缓存,这对于在加载用户两次时引用相同性非常重要。你必须
session.Refresh(user)
或我赞成第二个,因为它可以在会话处于活动状态时防止模型(用户)损坏,并且不需要db往返。
如果您不知道用户是否已加载并且只需要参考,请执行
var user = session.Load<User>(userId);
userPhoto.User = user;
session.Save(userPhoto);
if (NHibernateUtil.IsInitialized(user))
{
user.Photos.Add(userPhoto);
}