C # NHibernate Joined-Подкласс Получить проблему - PullRequest
1 голос
/ 19 апреля 2011

У меня есть следующие сопоставленные классы:

    <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) является как бухгалтерской компанией, так и клиентом, и когда я вызываю Session.Get после того, как он получил компанию как CompanyAccounting, он не идет вернуться к базе данных и проверить, есть ли запись для CompanyClient, предполагается, что Company может быть только на подклассе, есть ли способ заставить его указать, что он может наследовать от всех подклассов?

1 Ответ

0 голосов
/ 19 апреля 2011

Я закончил рефакторингом своих занятий, а не

класс компании, Класс CompanyClient: Компания, Класс CompanyAccounting: Компания

Я сделал CompanyClient и CompanyAccounting не унаследованными от Company, и добавил Company как <one-to-one> отношение, которое является первичным ключом для этих классов.

...