2012-09-08 47 views
0

我已經滿足了問題,代碼樣子簡單,但例外:NHibernate的查詢異常,任何機構幫助我?

 DDS.Model.ATest atest = new DDS.Model.ATest(); 
     atest.AID = Guid.NewGuid(); 

     ISession session = SessionProvider.GetNewSession(); 
     using (ITransaction transaction = session.BeginTransaction()) 
     { 
      session.SaveOrUpdate(atest); 

      int count = session.CreateQuery("from ATest").List().Count; 
      //Above row throw a exception: 
      //Batch update returned unexpected row count from update; actual row count: 0; expected: 1 

      transaction.Commit(); 
     } 

回答

1

您試圖保存之前加載項。首先提交事務,然後執行查詢。

DDS.Model.ATest atest = new DDS.Model.ATest(); 
//atest.AID = Guid.NewGuid(); // You should not assign IDs by yourself 

ISession session = SessionProvider.GetNewSession(); 
using (ITransaction transaction = session.BeginTransaction()) 
{ 
    session.SaveOrUpdate(atest); 
    transaction.Commit(); 
} 

int count = session.CreateQuery("from ATest").List().Count; 

但是,這似乎不是你的情況的問題。我相信你已經將ID映射爲Guid或Guid.comb。您不應該將值分配給ID。 NHibernate會照顧到這一點。

當您分配值並調用session.SaveOrUpdate()時,它將嘗試執行更新,因爲ID值不是Guid.Empty。更新方法將失敗,但有以下例外情況:批更新從更新返回意外的行計數;實際行數:0;預計:1,因爲UPDATE ... WHERE AID = <some guid>將被執行。

+0

但我的程序邏輯必須在事務提交之前進行查詢,其他方法可以做什麼? – user1516381

+0

嘗試刪除AID分配線。這首先是造成問題的原因。 –

+0

ATest.nhb.xml文件如下所示匹配ID列: \t \t \t \t \t user1516381