我有一個NHibernate對象,它是一個超類(我們稱之爲「超級」),還有一個從它繼承的子類(比方說它叫做「Sub」)。Nhibernate映射問題:類型爲超類的屬性
<class name="Super" table="SuperThings">
<id name="Id" type="System.Int32" column="SuperId">
<generator class="identity" />
</id>
<joined-subclass name="Sub" table="SubThings" extends="Super" lazy="true">
<key column="SubId" />
</joined-subclass>
</class>
我有一個單獨的類(稱爲「小工具」)與屬性類型超級。
<class name="Widget" table="Widgets" lazy="true">
<id name="Id" type="System.Int32" column="NoteId">
<generator class="identity" />
</id>
<many-to-one name="SuperProperty" column="SuperId" class="SuperClass" />
</class>
當我在一個Widget實例訪問超性質,NHibernate的嘗試懶洋洋地加載它,但我得到這個錯誤:
More than one row with the given identifier was found: 1, for class: Super
有在SuperThings只有一條記錄爲1的ID ,以及與其關聯的SubThings中的單獨記錄。在使用NHibernate Profiler並調試我的代碼後,它看起來像NHibernate試圖實例化一個類型爲子類的對象。
爲什麼這樣做?我是如何認爲這應該被映射的?
顯然,這是我實際工作的簡化版本。我正在使用的對象具有更多不同類型的屬性,所以也許我已經排除了實際導致問題的原因,但我想確保至少在基本級別上理解事情。