NHibernate version: 3.3.2.
我有一個NHibernate事務,有幾個操作。作爲事務中的一箇中間步驟,我嘗試通過Session.Save插入一個帶有自動增量PK的新實體實例。當保存錯誤並且自動增量Id尚未生成時如何從會話中刪除實體
在某些情況下,由於違反了外鍵值而導致插入錯誤。我發現這個異常是爲了做一些日誌記錄並忽略它,假設插入操作沒有完成,並繼續執行以下步驟。這是一項功能要求,不能更改。根據性能要求,在插入之前驗證值也不是可接受的解決方案。
我的問題:非持久實體已被添加到NH會話緩存但具有空Id。所以,後來我得到這個例外,做一些其他的NH操作時:
NHibernate.AssertionFailure: null id in MyApp.MyPackage.MyClass entry (don't flush the Session after an exception occurs)
我的問題:我怎麼能拉這惱人的「殭屍」實體關閉會話,所以我成功可以不惜一切結束提交事務腳步?
我不能退出,因爲Id是空的。
我試了一下,得到了以下異常:
System.InvalidOperationException: cannot generate an EntityKey when id is null
我也不能作爲Clear()
我在交易的中間,有一些之前和之後的步驟在當前會話中保存。
我得到的最初的例外有點令人困惑,並且引發了與真正問題發源地不同的地方。這個鏈接給了我一些信息,找出發生了什麼:NHibernate - null id in entry (don't flush the Session after an exception occurs)
你如何驅逐它? Session.Evict(objReference)? – epitka
@epitka是的,我使用調用session.Save時使用的實體實例。它具有屬性Id值= 0,如果它已被正確插入,它應該由Save填充。 – Diana