繁体   English   中英

Nhibernate实体更新一致性

[英]Nhibernate entity update consistence

如果我有一个User对象,其中包含UserPhoto对象的集合,该对象当前正在使用NHibernate进行级联更新而持久化。 因此,您保存了用户对象,同时也保存了所有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?

谢谢

NHibernate ISession具有一级缓存或实体缓存,这对于在两次加载用户时实现引用相等很重要。 你必须

  • 呼叫session.Refresh(user)
  • 将照片添加到用户收藏夹

我喜欢第二个,因为它可以防止会话处于活动状态并且不需要数据库往返时损坏模型(用户)。

如果您不知道该用户是否已经加载,只需要参考该怎么办

var user = session.Load<User>(userId);
userPhoto.User = user;
session.Save(userPhoto);

if (NHibernateUtil.IsInitialized(user))
{
    user.Photos.Add(userPhoto);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM