C# Nhibernate实体更新一致性
如果我有一个用户对象,其中包含一个UserPhoto对象的集合,当前正在使用NHibernate通过级联更新进行持久化。因此,您保存了用户对象,所有UserPhoto也都被保存了 有没有一种方法可以只通过保存UserPhoto上传一个新的UserPhoto,而不必保存整个用户对象层次结构 我试过了C# Nhibernate实体更新一致性,c#,nhibernate,caching,C#,Nhibernate,Caching,如果我有一个用户对象,其中包含一个UserPhoto对象的集合,当前正在使用NHibernate通过级联更新进行持久化。因此,您保存了用户对象,所有UserPhoto也都被保存了 有没有一种方法可以只通过保存UserPhoto上传一个新的UserPhoto,而不必保存整个用户对象层次结构 我试过了 userPhoto.User = user; // to set the parent object which will provide the UserPhoto with the correct
userPhoto.User = user; // to set the parent object which will provide the UserPhoto with the correct UserId when saving it
session.Save(userPhoto);
这会使用正确的用户ID将行保存在DB中,但是如果我这样做
session.Get<User>(userId)
session.Get(userId)
它不包含新照片。我猜NHibernate最初是在缓存用户对象,当我在代码的前面得到它时,然后我在DB级别添加userphoto,但是NHibernate缓存仍然包含不引用新照片的较早的用户对象,并且我需要在添加新照片后刷新该用户对象的NHibernate缓存。这是正确的吗?我如何刷新?我是否正确使用了NHibernate
感谢NHibernate ISession具有一级缓存或实体缓存,当加载用户两次时,这对于hvae引用平等性非常重要。你必须
- 调用会话。刷新(用户)或
- 将照片添加到用户集合
var user = session.Load<User>(userId);
userPhoto.User = user;
session.Save(userPhoto);
if (NHibernateUtil.IsInitialized(user))
{
user.Photos.Add(userPhoto);
}
var user=session.Load(userId);
userPhoto.User=User;
session.Save(userPhoto);
if(NHibernateUtil.IsInitialized(用户))
{
user.Photos.Add(userPhoto);
}
非常感谢。这是新版本吗?我似乎无法在NHibernate.dll中找到classit是NHibernate.NHibernateUtil