我对动物和狗的类型定义如下。 需要注意的是该对象的ID是AnimalID:
<class name="Animal" table="Animals">
<id name="Id" type="System.Int32" column="AnimalID">
<generator class="identity" />
</id>
<property name="IsBig" column="IsBig" type="System.Bool" not-null="true" />
</class>
<joined-subclass name="Dog" table="Dogs" extends="Animal">
<key column="AnimalID" />
<property name="OwnerID" column="OwnerID" type="System.Int32" non-null="true" />
<property name="IsStrong" column="IsStrong" type="System.Bool" non-null="true" />
</joined-subclass>
比方说,我有我的数据库中的以下信息:
in table Animals:
AnimalID IsBig
-------- -----
10 True
in table Dogs:
AnimalID OwnerID IsStrong
-------- ------- --------
10 1 True
10 2 False
首先,我查询狗其中OWNERID = 1。在同一个会话中,我查询狗其中OWNERID = 2。由于NHibernate的会话高速缓存,所述第二查询返回一个Dog对象,其中OWNERID = 1和IsStrong =真,其中它应该返回一个狗对象,其中OWNERID = 2和IsStrong =假。
NHibernate的可以通过ID(主键)柱自动缓存对象,所以请求狗所述第二时间结束检索与所述相同键的对象。 我可以解决通过调用对象上ISession.Evict()这个问题,但是这似乎是一个黑客。
什么更好的建议?