我有以下情况:
public class BaseClass
{
public virtual int Id {get;set;}
...
}
public class SubClass : BaseClass
{
...
}
和相应的FluentNH映射类:
public class BaseClassMap: ClassMap<BaseClass>
{
public BaseClassMap()
{
Table("tBase");
Id(x => x.Id).Column("Id").GeneratedBy.Identity();
....
Cache.ReadWrite();
}
}
public class SubClassMap: SubClassMap<SubClass>
{
public SubClassMap()
{
Table("tSub");
KeyColumn("Fk_Base_Id");
...
}
}
在数据库中,这由表tBase表示,其中Id为pk,表tSub为Fk_Base_id作为主键。
BaseClass的Caching.config中的缓存命令如下所示(使用NHibernate SysCache2):
SELECT rowTimeStamp from tBase
其中rowTimeStamp是时间戳/行转换列。在大多数情况下,此设置工作正常。正确命中或重置BaseClass的缓存(每当tBase中的数据发生更改时)
问题如下:
当tSub的条目已经被缓存并且我更新了tSub中的一些条目时,缓存将不会被重置。这是因为每当我打电话
Session.Get<SubClass>(id)
NH / Syscache2仅检查tBase中的更改,如日志中可见:
NHibernate.Cache.ReadWriteCache: Cache lookup: BaseClass#56881
NHibernate.Cache.ReadWriteCache: Cache hit BaseClass#56881
SubClass上没有缓存查找(我通过Session.Get请求) 因此,只要tBase没有变化,即使数据已经改变,tSub也会被缓存。
(所有其他子类都会像所描述的那样映射)
目前解决此问题的唯一方法是分解/更改继承更改,这在我们的设置中是不可能的。
非常感谢任何帮助/建议!