Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Nhibernate子类映射问题_C#_Asp.net_Nhibernate_Orm - Fatal编程技术网

C# Nhibernate子类映射问题

C# Nhibernate子类映射问题,c#,asp.net,nhibernate,orm,C#,Asp.net,Nhibernate,Orm,我使用nhibernate子类映射来处理系统对象的描述。其基本思想是拥有一个描述类,并通过拥有特定于对象的子类来进行多态关联。我的代码将描述数据正确插入数据库;这意味着在插入数据时正确创建了ownerid和ownertype列 但是当我使用nhibernate.load()加载Foo对象时,nhibernate没有使用OwnerType列查询Foo的描述-它只是使用ownerId列查询描述表,这会产生冲突,因为表中可能有其他行具有相同的id,但与不同的OwnerType相关联 你能帮我找到为什么

我使用nhibernate子类映射来处理系统对象的描述。其基本思想是拥有一个描述类,并通过拥有特定于对象的子类来进行多态关联。我的代码将描述数据正确插入数据库;这意味着在插入数据时正确创建了ownerid和ownertype列

但是当我使用nhibernate.load()加载Foo对象时,nhibernate没有使用OwnerType列查询Foo的描述-它只是使用ownerId列查询描述表,这会产生冲突,因为表中可能有其他行具有相同的id,但与不同的OwnerType相关联

你能帮我找到为什么在负载查询中没有包含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>
公共类产品:EntityBase
{
公共虚拟字符串名称{get;set;}
公共虚拟IList描述{get;set;}
}
公共类ProductDescription:描述
{
公共虚拟产品产品{get;set;}
}
公共类说明:EntityBase
{
公共虚拟字符串名称{get;set;}
公共虚拟字符串ShortDescription{get;set;}
公共虚拟字符串LongDescription{get;set;}
}

在鉴别器映射上添加force=true

这将确保将ownertype添加到查询中