我得到一個奇怪的錯誤在NHibernate的(V3.3),試圖堅持一個實體與可手動生成的ID時:無法確定是否實體是瞬時的或拆卸
無法確定是否{實體}與分配的標識符{Id}是暫時的或分離的;查詢數據庫。 在會話中使用顯式的Save()或Update()來防止這種情況發生。
但問題是,我使用Save
代替SaveOrUpdate
是。可能是什麼問題呢?
我得到一個奇怪的錯誤在NHibernate的(V3.3),試圖堅持一個實體與可手動生成的ID時:無法確定是否實體是瞬時的或拆卸
無法確定是否{實體}與分配的標識符{Id}是暫時的或分離的;查詢數據庫。 在會話中使用顯式的Save()或Update()來防止這種情況發生。
但問題是,我使用Save
代替SaveOrUpdate
是。可能是什麼問題呢?
原來,我的問題是實際發生的同時節省了父實體,包含子實體在一個一對多的關係:
<class xmlns="urn:nhibernate-mapping-2.2" name="ParentTable" table="ParentTable">
<id name="ManuallyAssignedId">
<generator class="assigned" />
</id>
<!- child table also has a manually assigned id -->
<bag cascade="all" inverse="true" name="ChildTable">
<key>
<column name="ParentTable_id"/>
</key>
<one-to-many class="ChildTable" />
</bag>
</class>
換句話說,到Save
調用父實體導致子實體的SaveOrUpdate
,NHibernate抱怨。
當我意識到,我很快就發現這個StackOverflow的線程:How to save a child with assigned id in nhibernate,它有兩個很好的建議:
Create and map a Version or Timestamp column - 如果它爲空,NHibernate的會知道它需要堅持的實體,或
Attach a custom Interceptor to a session (or session factory)並使用自定義專用字段來跟蹤實體是否需要保持。
NHibernate中有抽象層嗎?你有任何版本/時間戳列嗎?你能發佈你的映射和代碼嗎? –
最後我意識到問題是在保存父級實體時級聯子實體,在SO上有一個答案,它解釋瞭解決這個問題的可能方法。我已經修好了,但沒有時間發佈我的發現。 – Lou
你會介意連接解決你的問題的答案嗎? – Firo