我使用 NHibernate 3.2 和 appfabric 1.1 作为二级缓存。我有 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 强制我声明一个鉴别器元素,这对我来说不是必需的。
有没有办法做到这一点 ?