我有一個我開發的Web應用程序,它有一個相當複雜的保存例程。用戶構建並修改一系列計劃,然後選擇保存數據。所有的添加,刪除和修改都會一次保存(全部在單個事務中)。NHibernate:SaveOrUpdate - 兒童上的重複鍵異常
Plan
Collection Of Child
Collection of ChildDetail
大部分保存的是通過調用一個計劃對象SaveOrUpdate並讓這個保存管理計劃和它的孩子們表演。當我想要插入新記錄並使用cascade = all-delete-orphan來確保在客戶端刪除子對象或子細節對象時,我將零作爲未保存的值。
但是,當出現以下情況時,我正在接收異常:用戶使用子對象創建計劃並保存它們。這將節省罰款。
Plan(id=0)
Child[0](id=0), Child[1](id=0), Child[2](id=0)
如果用戶然後刪除子對象,並在它們的位置添加新的子對象,然後嘗試保存更改。
Plan(id=123)
Child[0](id=0), Child[1](id=0), Child[2](id=0)
這將引發無法與內部異常「指定SQL0803重複鍵值」插入孩子GenericAdoException。
我正在尋找的行爲是NHibernate刪除以前的子對象,然後在計劃上調用SaveOrUpdate時插入新對象。我怎樣才能做到這一點,同時讓父母管理關係?