2011-01-28 51 views
1

在我的模型中,所有派生類都具有與基本抽象類相同的** persistent **屬性和方法。有一些類不是持久化的,而且方法有不同的實現。 現在我有大約4個繼承類,我將來會增加更多。申請的性質是可以爲不同的用途添加這樣的類別,所以不可能事先知道它們。唯一給出的是它們都將共享相同的方法和持久屬性。這是一列,將用作鑑別器。NHibernate - 每個類層次結構中的單個表 - 繼承類是未知的

我在戰略上掙扎。很明顯,我不想爲每個派生類編寫一個ClassMap。事實上,我就像持久層完全無視這些派生類。我正在考慮讓派生類能夠在基類之外創建並返回一個基類。

我不認爲我有更好的選擇?

回答

2

你的方法是有缺陷的,持久層不能是無知的子類,因爲它需要知道加載/存儲時類是什麼。

可以使用基於約定的映射而不是顯式映射(Fluent具有自動映射功能,而ConfORM僅基於約定/覆蓋功能),因此您不必編寫每個類映射。

在ConfORM中,就像說,例如,orm.TablePerClass<TheBaseClass>(),然後mapper.CompileMappingFor(TheBaseClassAndAllItsSubclasses)一樣簡單,您將無需任何額外的工作即可獲得映射。

+0

謝謝。雖然這不是我想要的答案,但它澄清了我的錯誤。即使我能以某種方式讓NHibernate保存一個未知的類,它也無法加載一個未知的類。由於對我有一種'插入'環境很重要,我會讓NHibernate不知道子類,並讓每個子類都把它自己的基類版本發送給NHibernate。 – Yoav

相關問題