C # NHibernate присоединился -проблема с получением подкласса

#c# #nhibernate #inheritance #nhibernate-mapping

#c# #nhibernate #наследование #nhibernate-сопоставление

Вопрос:

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

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

Ответ №1:

В итоге я провел рефакторинг своих классов, и вместо того, чтобы иметь

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

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