2010-03-11 49 views
1

刪除我有這些類:NHibernate的級聯從另一個實體集合

public class User 
{ 
    public IList<Order> LastOrders { get; set;} 
} 

public class Order {} 

哪裏LastOrders是許多一對多地圖。

當我刪除一個訂單時,我如何告訴(流利)NHibernate從所有用戶的LastOrders集合中刪除Order?可能嗎?

即刪除之前(DB保存/加載代碼跳過)

user.LastOrders.Add(order); 
Session.Delete(order); 
Assert(!user.LastOrders.Contains(order)); 

目前我做手工(用戶,更新集合查找,保存)。沒有這個,NHibernate不能刪除Order,因爲它被用戶的LastOrders引用。

回答

0

如果將集合映射設置爲忽略缺少的行,則可以安全地刪除該訂單。

這會在收集表中留下孤行,NHibernate會忽略這些孤行。這些可以在一些批處理過程中清理。

HasManyToMany(x => x.LastOrders) 
    .NotFound.Ignore(); 

這會讓你更快地刪除那麼你當前的做法。缺點是收集表一段時間會與您的模型不一致。

+0

是的,但在這種情況下,我會在多對多的表中得到孤立的記錄? – queen3 2010-03-11 14:53:21

+0

好的,你確定孤立的行會被NH忽略嗎?如果它插入具有相同ID的新多對多(假設可能)然後回讀 - 會有兩個相同的結果,我不確定NH是否期望這樣做。無論如何,這看起來不像是一個乾淨的解決方案。 – queen3 2010-03-11 20:08:48

相關問題