2012-09-22 118 views
-1

我有這個功能NHibernate的更新

  • 總是返回true,但問題是,它修改表的用戶,但它不修改表Useracl
  • 我怎樣才能糾正這種代碼?

    try 
    { 
        NHibernate.ISession nhSession= User.OpenSession(); 
        using (var tx = nhSession.BeginTransaction()) 
        { 
         User u = new User() { 
          Account = acc, 
          Identification = identification, 
          ContactEmail = mail, 
          ContactName = nom, 
          ContactPhone = phone, 
          NotifyEmail = notify, 
          Password = mot 
         }; 
    
         nhSession.SaveOrUpdate(u); 
         Useracl ua = new Useracl { Account = acc, UserID = identification, AccessLevel = 1, AclID = acc }; 
         nhSession.SaveOrUpdate(ua); 
         tx.Commit(); 
         return true; 
        } 
    } 
    catch 
    { 
        return false; 
    } 
    
+2

您可以通過它讀取啓動。我們不是活編譯器。然後你可以發佈你的NH映射。 – Artless

+0

良好的評論感謝 – developper

+0

現在你能回答@Trickery – developper

回答

1

NHibernate的不知道是否保存(即插入),或因爲它具有複合ID映射更新Useracl實例。您需要明確告訴它是保存新實例還是更新現有實例。在你的情況,你需要調用:的

nhsession.Save(ua); 

代替

nhsession.SaveOrUpdate(ua); 
+0

不,這是相同的錯誤。 – developper

0

試試這個

 

    nhSession.SaveOrUpdate(u); 

     Useracl ua = new Useracl() { 
     Account = acc, 
     UserID = identification, 
     AccessLevel = 1, 
     AclID = acc 
     }; 
    nhSession.SaveOrUpdate(ua); 
    tx.Commit();