2012-11-29 37 views
0

如果我有一個用戶對象,其中包含當前使用NHibernate級聯更新持久保存的UserPhoto對象的集合。因此,您保存用戶對象,並且所有UserPhoto也會保存。Nhibernate實體更新一致性

有沒有一種方法可以通過只保存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); 

其中在DB罰款正確的用戶ID保存行,但如果我再做

session.Get<User>(userId) 

它不包含新的照片。我猜測,NHibernate是最初緩存用戶對象,當我在代碼中得到它,然後我在數據庫級別添加userphoto,但NHibernate緩存仍然包含較早的用戶對象,它不參考新照片,我需要在添加新照片後刷新該用戶對象的NHibernate緩存。這是正確的,我該如何刷新?我正確使用NHibernate嗎?

由於

回答

1

NHibernate的ISession的具有第一級高速緩存或實體緩存加載用戶兩次時hvae引用相等這是很重要的。你必須

  • 呼叫session.Refresh(user)
  • 照片添加到用戶的集合

我贊成第二,因爲它可以防止破壞的模型(用戶),而會話是活動的,沒有按」 t需要一個db往返。

,如果你不知道,如果用戶已經加載,並且只需要參考做

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

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

非常感謝。 NHibernateUtil - 是一個新版本嗎?我似乎無法找到該類 – NZJames

+0

它是NHibernate.NHibernateUtil中NHibernate.dll – Firo