Nhibernate 关联引用未映射-按每个子类策略由表映射的对象集合
我在NHibernate映射方面遇到了问题,我不确定我是否犯了noob错误,或者我是否遇到了NHibernate的限制 我有三个域对象,它们与映射hbm.xml文件关联Nhibernate 关联引用未映射-按每个子类策略由表映射的对象集合,nhibernate,mapping,table-per-subclass,Nhibernate,Mapping,Table Per Subclass,我在NHibernate映射方面遇到了问题,我不确定我是否犯了noob错误,或者我是否遇到了NHibernate的限制 我有三个域对象,它们与映射hbm.xml文件关联 人 专业人员 个人分类 public class Person { public virtual int Id { get; set; } public virtual string Name { get; set; } } <hibernate-mapping xmlns="urn:nhibernate
人
专业人员
个人分类
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>
公共类人物
{
公共虚拟整数Id{get;set;}
公共虚拟字符串名称{get;set;}
}
特殊人源于人
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>
公共类专业人员:个人
{
公共虚拟字符串MagicString{get;set;}
公共虚拟PersonCategory PersonCategory{get;set;}
}
PersonCategory收集了一些特殊的人我找到了答案 所以总结是,这与我试图引用派生类型的事实无关。集合的一对多元素中的class属性需要一个完全签名的名称。所以这是有效的
<set name="Persons" table="SpecialPerson">
<key column="PersonCategoryID" />
<one-to-many class="NHibernateTest.Domain.Test.SpecialPerson, NHibernateTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
</set>
我不知道为什么在这种情况下它需要一个完全签名的名字,而我在其他地方使用了一个简化的名字,没有任何问题
因此,这不是NHIbernate的限制,这是一个很大的解脱,因为我正在考虑重写许多现有映射的讨厌任务
<set name="Persons" table="SpecialPerson">
<key column="PersonCategoryID" />
<one-to-many class="NHibernateTest.Domain.Test.SpecialPerson, NHibernateTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
</set>