NHibernate のマッピングに問題があり、初歩的なミスを犯したのか、それとも NHibernate の制限に遭遇したのかわかりません。
関連するマッピング hbm.xml ファイルを持つ 3 つのドメイン オブジェクトがあります。
Person
SpecialPerson
PersonCategory
public class Person
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
}
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="Person"
table="Person">
<id name="Id" column="PersonID">
<generator class="native" />
</id>
<property name="Name" />
</class>
</hibernate-mapping>
SpecialPerson は Person から派生します
public class SpecialPerson : Person
{
public virtual string MagicString { get; set; }
public virtual PersonCategory PersonCategory { get; set; }
}
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<joined-subclass name="SpecialPerson"
extends="Person">
<key column="PersonID" />
<property name="MagicString" />
<many-to-one name="PersonCategory" column="PersonCategoryID" cascade="save-update" />
</joined-subclass>
</hibernate-mapping>
PersonCategory は SpecialPersons のコレクションを保持します <== これが私の悲しみの原因です
public class PersonCategory
{
public virtual int Id { get; set; }
public virtual ICollection<SpecialPerson> Persons { get; set; }
}
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="PersonCategory"
table="PersonCategory">
<id name="Id" column="PersonCategoryID">
<generator class="native" />
</id>
<set name="Persons" table="SpecialPerson" inverse="true">
<key column="PersonCategoryID" />
<one-to-many class="SpecialPerson"/>
</set>
</class>
</hibernate-mapping>
セッションを作成しようとすると、「関連付けがマップされていないクラスを参照しています: SpecialPerson」という NHibernate.MappingException が発生します。
テーブル属性を指定することは想定されていないため、適切な構文を使用していませんが、派生型を参照しようとしているときに何か他のものを使用している、または
NHibernate はオブジェクトが派生型のコレクションを保持することを許可していませんその派生型が具象クラス継承マッピング戦略ごとにテーブルにマップされていない限り、型。誰でも私を啓発できますか?