0

我有一個情況,我有一個Common.Domain.PersonSpecific.Domain.PersonNHibernate:完全覆蓋基域實體

第一個應該作爲一個通用包的一部分提供。
當通用軟件包需要定製以滿足特定項目的需求時,纔會出現第二個軟件包。

在對象模型中,它可以很容易地通過繼承來實現。
然而,在NH映射中,我遇到了一個小問題。

我可以創建一個NHibernate <subclass>映射,但這需要我使用鑑別器。但是,我知道如果特定人員類是繼承的,那麼在此特定項目中將不會使用公共類實例。

什麼是最好的方式來實現這一點,而不添加鑑別器列到基類(因爲沒有不同的情況下進行區分)?

+0

你可以映射在3項不同的方式中的繼承NHibernate的。你需要一些方法來告訴你想從數據庫映射到哪個類。你想如何區分數據庫中的兩個類? – Paco 2010-05-25 18:44:07

+0

在所描述的情況下,這個表格中永遠不會有多於一個類別,所以差異不存在。 – 2010-05-25 18:50:40

+0

比我不明白這個問題。當基類永遠不會被使用時,我不明白爲什麼你需要繼承。有了這個描述,我只會創建2個類中的一個。 – Paco 2010-05-25 19:12:06

回答

0

只需映射Specific.Domain.Person並保持Common.Domain.Person不映射。

如果你沒有保存它的實例,NHibernate不需要知道它。

+0

這將要求公共程序集的用戶重複映射,即使它們不覆蓋該類。如果它們覆蓋它,如果基類有8個屬性並被覆蓋1,那麼看起來多餘且容易出錯,使它們再次映射8個原始屬性。 – 2010-05-26 06:22:12

+0

容易出錯?只需使用相同的hbm並更改文件名。 – 2010-05-26 11:47:47

+0

我明白你的意思,但是有一些問題。關於引用基類的所有其他實體的鏈接怎麼樣(但應該作爲新實現加載)?所以你基本上建議共用庫應該附帶一組用戶必須修改的單獨的hbm文件?在這種情況下,向基礎實體添加任何新屬性將需要更復雜的遷移過程。 – 2010-05-26 12:44:35