我們在我們的模型中有一個對象,稱之爲類X.在我們的模型中還有其他幾個類有一個X類的實例作爲屬性,稱它們爲A,B,C等。因爲每個X只能屬於一個父類。爲了在數據庫端映射這種關係,我們正在使用表A,B和C中X表的外鍵。對於NHibernate映射,我們目前使用A,B和C的映射類:我如何讓NHibernate刪除一對一關係中的孤兒?
ManyToOne(a => a.X, m => m.Cascade(Cascade.All));
這主要適用於保存,檢索和更新我們班XS - 我們已經有很多讓NHibernate的OneToOne
映射到工作的權利問題。問題是,當你持有持久化類A並將其X替換爲新的X實例並保存該實例時,則新的X實例將被寫入數據庫,並且A列中的外鍵得到更新,但舊的X不會被刪除,所以我們現在有一個孤兒X.
我們希望那些孤兒Xes被自動刪除。我們希望NHibernate能夠做到這一點,因爲X是一個複雜的類,它有許多自己與其他表的關係,我們有級聯設置可以正確處理 - 我有一個SQL腳本可以正確地刪除孤兒Xes,它的大小約爲50線條很長。
我們試圖避免涉及在類X中引用其父項的解決方案,因爲總共有5個類可以屬於它,並且類A的情況有一個X,B類有2個XES在已命名的屬性等
事情我試過到目前爲止:
添加DeleteOrphans
到ManyToOne
映射 - 不工作
OneToOne
映射 - 真的想關鍵是在其他表,並且似乎不支持級聯刪除反正。
也認爲:
NHibernate的似乎並不具備設立某種即使像更新的東西或刪除發生
Apparantly觸發任何支持,只有OneToMany
和ManyToMany
映射支持DeleteOrphans
,所以,我可以讓實際屬性使用某種列表或集合,並使用getter和setter來使它看起來像模型其餘部分的普通屬性。聽起來很不體面,而且可能需要在X中引用其他類。
數據庫觸發器 - 我還沒有真正檢查SQL Server觸發器是否可以用於這種方式,但它聽起來像一個非常尷尬的解決方案。
有沒有人有任何想法如何使這項工作?