NHibernate映射到基而不是子类
在我的业务模型中,我有一个实体类(IPoint接口),它有一个相同类型的子元素列表。DB中的链接通过多对多表进行。该实体还具有用于子类化的鉴别器(IPoint实现) 起初我做了简单的多对多映射,一切都很好。但我在映射中提出了(作为最佳实践建议)一对多关联,而不是多对多关联。为此,我创建了具有复合id的新类PointLink,它包含父元素和子元素。但NHibernate并没有对这些子元素进行子类化(就像存在多对多关联时那样)。他创建了自己的代理对象(IPoint实例)。看起来他在引用中完全忽略了子类规则。但对于父元素,使用子类规则 IPoint的映射:NHibernate映射到基而不是子类,nhibernate,nhibernate-mapping,Nhibernate,Nhibernate Mapping,在我的业务模型中,我有一个实体类(IPoint接口),它有一个相同类型的子元素列表。DB中的链接通过多对多表进行。该实体还具有用于子类化的鉴别器(IPoint实现) 起初我做了简单的多对多映射,一切都很好。但我在映射中提出了(作为最佳实践建议)一对多关联,而不是多对多关联。为此,我创建了具有复合id的新类PointLink,它包含父元素和子元素。但NHibernate并没有对这些子元素进行子类化(就像存在多对多关联时那样)。他创建了自己的代理对象(IPoint实例)。看起来他在引用中完全忽略了子
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-access="property" auto-import="true" default-cascade="none" default-lazy="true">
<class xmlns="urn:nhibernate-mapping-2.2" name="Elgsis.Core.IPoint, Elgsis.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" table="Points">
<id name="Id" type="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<column name="Id" />
<generator class="identity" />
</id>
<discriminator type="String">
<column name="Type" />
</discriminator>
<property name="Name" type="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<column name="Name" />
</property>
<bag cascade="all" inverse="true" name="Links">
<key>
<column name="ParentId" />
</key>
<one-to-many class="Elgsis.Core.PointLink, Elgsis.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</bag>
<subclass name="Elgsis.Core.Meter, Elgsis.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" discriminator-value="1" />
<subclass name="Elgsis.Core.Controller, Elgsis.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" discriminator-value="2" />
</class>
</hibernate-mapping>
以及链接实体PointLink的映射
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-access="property" auto-import="true" default-cascade="none" default-lazy="true">
<class xmlns="urn:nhibernate-mapping-2.2" name="Elgsis.Core.PointLink, Elgsis.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" table="Points_Points">
<composite-id mapped="false" unsaved-value="undefined">
<key-many-to-one name="Parent" class="Elgsis.Core.IPoint, Elgsis.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
<column name="ParentId" />
</key-many-to-one>
<key-many-to-one name="Child" class="Elgsis.Core.IPoint, Elgsis.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
<column name="ChildId" />
</key-many-to-one>
</composite-id>
</class>
</hibernate-mapping>
也许我应该使用类而不是接口作为基类型,或者它不应该有太大的区别
我正在使用最新的NHibernate 2.1.0.4000和FluentNHibernate 1.0.0.0
谢谢大家! 问题是延迟加载已打开。刚刚为引用的类型关闭了它,现在它正在正确加载 这种行为很好