2010-09-18 68 views
0

我有一個列表和ListItems之間的多對多關聯:列表知道它的項目,但ListItem不知道包含列表。級聯是saveupdate。NHibernate的多對多和刪除項目

因此,無論何時我試圖刪除一個ListItem實體,我都會得到一個SQLException,說我打破了參照完整性。 NHibernate試圖刪除我的ListItem而不刪除鏈接表中的相應行。問題是,是否可以指示NHibernate在不破壞參照完整性的情況下刪除我的ListItem?

如果我必須手動從包含所有列表中刪除項目,我該如何正確地做到這一點?

非常感謝您的任何建議。

烏魯

回答

0

你需要對孩子的映射設置爲inverse=true。從another thread

當你調用SaveOrUpdate NHibernate的 首先刪除所有子 對象。然後,因爲 關係都沒有標記爲反向,所以NHibernate還會嘗試將 子表 中的 外鍵列設置爲null。由於行已經刪除了 ,您將收到第二個 錯誤。您需要在 關係的一方設置inverse = true來修復 這個問題。這通常在一個 (主鍵或父母)一側完成。如果你的 不這樣做,NHibernate將會爲 的關係做出適當的更新 。

public class StoreMap : ClassMap<Store> 
{ 
    public StoreMap() 
    { 
    Id(x => x.Id); 
    Map(x => x.Name); 
    HasMany(x => x.Staff) 
     .Inverse()   // Magic code! 
     .Cascade.All(); 
    } 
} 
+0

太棒了,謝謝! – ulu 2010-09-19 19:54:55

+0

但是,現在添加到列表不起作用!該項目本身保存到數據庫,但我無法將其添加到列表中。我正在使用 list.Items.Add(newItem); _session.Save(newItem); _session.Update(list); – ulu 2010-09-20 13:58:25

+0

如何添加到列表**不**工作?如果你需要,更新你的問題,所以我們有更多的細節。 :) – rebelliard 2010-09-20 14:06:14