Проблема NHibernate: список подклассов, собирающих все классы в таблице на иерархию классов - PullRequest
2 голосов
/ 22 марта 2012

У нас есть класс SpecialContainer (который сам является подклассом Container), у которого есть список содержимого типа TypeThreeContent:

class SpecialContainer {
  private IList<TypeThreeContent> _contents = new List< TypeThreeContent >();
}

TypeThreeContent - это просто подкласс BaseContent, оба из которых имеют некоторые неинтересныесвойства, которые я пропустил просто.Вот отображение:

<hibernate-mapping xmlns="urn:nhibernate-mapping-​2.2">
  <class xmlns="urn:nhibernate-mapping-​2.2" discriminator-value="0" name="AbstractBaseContent" table="tblContent">
    <id access="field" name="_id" type="System.Int32" unsaved-value="0">
      <column name="ContentID" />
      <generator class="identity" />
    </id>
    <discriminator type="Int32">
      <column name="FormsType" />
    </discriminator>
    <subclass name="TypeOneContent" discriminator-value="1">
    </subclass>
    <subclass name="TypeTwoContent" discriminator-value="2">
    </subclass>
    <subclass name="TypeThreeContent" discriminator-value="3">
    </subclass>
  </class>



<class xmlns="urn:nhibernate-mapping-​2.2" discriminator-value="-1" name="BaseContainer" table="tblContainers">
    ...
    <subclass name="SpecialContainer" discriminator-value="1">
      <join table="tblSpecialContainers">
        ...
        <bag access="field" cascade="none" inverse="true" lazy="true" name="_contents">
          <key>
            <column name="ContainerId" />
          </key>
          <one-to-many class="TypeThreeContent" />
        </bag>
       </join>
  </class>
</hibernate-mapping>

Проблема, с которой я столкнулся, состоит в том, что строки с другими значениями дискриминатора (т.е. 1 и 2) выбираются при получении списка NH.Я использовал NHProf, чтобы убедиться, что в запросе SQL не указан дискриминатор в его критериях:

SELECT ... FROM dbo.tblContent content0_ WHERE content0_.SpecialContainerId = 140 / * @ p0 * /

Что здесь происходит?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...