Я использую NHibernate 3.2 с appfabric 1.1 для кеша 2-го уровня. У меня есть 2 класса, сопоставленные в одной таблице. Первый класс AFullEntity (MonitorLayoutData в образце) наследует второй класс, который является облегченным классом (MonitorLayout). MonitorLayoutData содержит тяжелое свойство, которого нет в базовом классе. Например :
<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="Entities.MonitorLayout,Entities" table="MonitorLayouts2" lazy="false" schema="dbo" polymorphism="explicit">
<cache usage="nonstrict-read-write"/>
<id name="Id" column="MonitorLayout_ID" type="int">
<generator class="native" />
</id>
<property name="Name" column="MonitorLayout" type="string" />
<property name="UserId" column="User_ID" type="int" />
<property name="IsPublic" column="IsPublic" type="Boolean" not-null="true" />
<property name="ViewGuid" column="ViewGuid" type="string" not-null="true" />
<property name="TreeNode" column="TreeNode" type="string" />
<property name="IncludeNodeChildren" column="IncludeNodeChildren" type="Boolean" />
</class>
<class name="Entities.MonitorLayoutData,Entities" table="MonitorLayouts2" lazy="false" schema="dbo" polymorphism="explicit">
<cache usage="nonstrict-read-write"/>
<id name="Id" column="MonitorLayout_ID" type="int">
<generator class="native" />
</id>
<property name="Name" column="MonitorLayout" type="string" />
<property name="UserId" column="User_ID" type="int" />
<property name="IsPublic" column="IsPublic" type="Boolean" not-null="true" />
<property name="ViewGuid" column="ViewGuid" type="string" not-null="true" />
<property name="TreeNode" column="TreeNode" type="string" />
<property name="IncludeNodeChildren" column="IncludeNodeChildren" type="Boolean" />
<property name="LayoutData" column="LayoutData" type="BinaryBlob" not-null="false"/>
</class>
</hibernate-mapping>
Эти классы используют явный полиморфизм для извлечения только сущностей выбранного типа, как примечание в документации: «Явный полиморфизм полезен, когда два разных класса сопоставляются с одной и той же таблицей (это позволяет «облегченному» классу, содержащему подмножество таблицы столбцы)».
Однако у меня возникла проблема, когда объекты кэшируются. Когда я обновляю AFullEntity, изменения не отображаются в облегченном классе, и это большая проблема для нас. Я пробую другой механизм, такой как подкласс или расширение, но NHibernate вынуждает меня объявлять элемент дискриминатора, который мне не требуется.
Есть ли способ сделать это?