C#NHibernate Joined-Subclass得到问题

时间:2011-04-19 11:51:19

标签: c# nhibernate inheritance nhibernate-mapping

我有以下映射类:

    <class name="Company" table="Company">
        <id name="ID" column="CompanyID">
          <generator class="native"/>
        </id>
        <joined-subclass name="CompanyAccounting" table="company_accounting" lazy="true">
          <key column="CompanyID"/>
        </joined-subclass>
        <joined-subclass name="CompanyCarbon" table="company_carbon" lazy="true">
          <key column="CompanyID" />
        </joined-subclass>
    </class>

现在,以下测试失败:

        var company = CompanyAdapter.Get<Company>(_session, 32);
        Assert.IsNotNull(company);

        var client = CompanyAdapter.Get<CompanyClient>(_session, 32);
        Assert.IsNotNull(client);

但以下成功:

        var client = CompanyAdapter.Get<CompanyClient>(_session, 32);
        Assert.IsNotNull(client);

        var company = CompanyAdapter.Get<Company>(_session, 32);
        Assert.IsNotNull(company);

第一次测试失败的原因是因为NHibernate将Company检索为CompanyAccounting,因为Company(32)既是会计公司又是客户端,当我在调查公司作为CompanyAccounting后调用Session.Get时它不会去回到数据库并检查是否有CompanyClient的条目,它假定公司只能在子类上,是否有指定它可以从所有子类继承?

1 个答案:

答案 0 :(得分:0)

我最终做的是重构我的课程,而不是

类公司, class CompanyClient:公司, class CompanyAccounting:Company

我使CompanyClient和CompanyAccounting不从公司继承,并将公司添加为<one-to-one>关系,这是这些类的主键。