У нас есть класс 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 * /
Что здесь происходит?