2011-12-02 100 views
16

我很難弄清楚NH例外:批更新從更新中返回了意外的行計數;實際行數:0;預計:1

批更新從更新返回意外的行數;實際行 count:0;預計:1

我的達爾代碼:

public T Save(T item) 
     { 
      using (ISession session = NHibernateHelper.GetSession()) 
      { 
       using (var transaction = session.BeginTransaction()) 
       { 
        session.SaveOrUpdate(item); 

        transaction.Commit(); 

        return item; 
       } 
      } 
     } 

我log4net的文件:

命令0:UPDATE Metadata_FriendDetails SET用戶ID = @ P0,電子郵件= @ P1, 名稱= @ p2 WHERE FriendId = @ p3; @ p0 = a358ab9d-d481-4bdd-8cb2-18ddc8898c70 [類型:Guid(0)],@ p1 = '[email protected]'[類型:字符串(4000)],@ @ p2 ='myFriend'[類型:字符串 (4000)],@ p3 = 2ea35658-edb1-43e3-b848-e1915d1042df [類型:GUID(0)]

2011-12-02 13:06:49750 [代理人:適配器運行線程測試 'SaveFriendDetails_Test' id爲 「17016e48- 1ff4-4dea-8536-6aa3b24e5fb7' ] DEBUG NHibernate.AdoNet.AbstractBatcher - 閉IDbCommand的,開放的 IDbCommands:0 2011-12-02 13:06:49751 [代理:適配器運行線程 測試 'SaveFriendDetails_Test',且id '17016e48-1ff4-4dea-8536-6aa3b24e5fb7']錯誤 NHibernate.Event.Default.AbstractFlushingEventListener - 不能 同步數據庫狀態與會話 NHibernate.StaleStateException:批量更新返回意外的行 從更新計數;實際行數:0;預計:1

有沒有人看到這個問題?

TIA

+2

一對夫婦possiblites的,你的對象被分離,並從未在DATABSE actaully創建的,所以沒有原單對象行更新。或者更新之前,表中的某個值已更改。我認爲這是一個可重複的懷疑?在創建,更新和保存對象的過程中發佈一些代碼段會很有幫助。 – user957902

+0

我認爲你應該寫異常的來源,例外。它會更有幫助。 – Joshi

+0

added.i can not see why:NHibernate.Event.Default.AbstractFlushingEventListener - 無法使數據庫狀態與會話NHibernate同步 –

回答

32

的問題是,在保存時,我不應該提供的id值和更新,我必須爲它供給。

+1

只要您能夠,請確保將此答案標記爲已接受,以便其他人知道有解決方案。 –

3

保存前必須將Id對象設置爲null

例如:

obj.setId(null); 
objectDao.save(obj); 
+0

如果你有一個Integer ID你必須使用:obj.setId(0) - 所以它的工作原理。不適合我,因爲我已將Id設置爲-1 – bernhardrusch

相關問題