【发布时间】:2009-11-07 21:33:29
【问题描述】:
我正在使用 nhibernate 子类映射来处理系统对象的描述。基本上想法是有一个描述类并通过具有特定于对象的子类来进行多态关联。我的代码将描述数据正确插入数据库;这意味着在我插入数据时正确创建了 ownerid 和 ownertype 列。
但是当我使用 nhibernate.load() 加载 Foo 对象时,nhibernate 没有使用 OwnerType 列来查询 Foo 的描述 - 它只是使用 ownerId 列查询描述表,这会产生冲突,因为在具有相同 id 但关联到不同所有者类型的表。
你能帮我找出为什么它不包括 ownerType 来描述负载查询吗?我该如何解决这个问题?谢谢!
public class Product : EntityBase
{
public virtual string Name { get; set; }
public virtual IList<ProductDescription> Descriptions { get; set; }
}
public class ProductDescription : Description
{
public virtual Product Product { get; set; }
}
public class Description : EntityBase
{
public virtual string Name { get; set; }
public virtual string ShortDescription { get; set; }
public virtual string LongDescription { get; set; }
}
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Test.Domain" assembly="Test.Domain">
<class name="Test.Domain.Product, Test.Domain" table="Products">
<id name="ID" column="ID" type="Int32" unsaved-value="0">
<generator class="native" />
</id>
<property name="Name" />
<bag name="Descriptions" inverse="true" cascade="all">
<key column="OwnerID" />
<one-to-many class="Test.Domain.ProductDescription, Test.Domain" />
</bag>
</class>
</hibernate-mapping>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Test.Domain" assembly="Test.Domain">
<class name="Test.Domain.Description, Test.Domain" table="Descriptions" discriminator-value="0">
<id name="ID" column="ID" type="Int32" unsaved-value="0">
<generator class="native" />
</id>
<discriminator column="OwnerType" />
<property name="Name" />
<property name="ShortDescription" />
<property name="LongDescription" />
<subclass name="Test.Domain.ProductDescription, Test.Domain" discriminator-value="1">
<many-to-one name="Product" class="Test.Domain.Product, Test.Domain" column="OwnerID" not-null="true"></many-to-one>
</subclass>
</class>
</hibernate-mapping>
【问题讨论】:
标签: c# asp.net nhibernate orm