NHibernate:SubClassMap缓存无法正常工作

时间:2016-02-12 16:19:15

标签: tsql nhibernate fluent-nhibernate fluent-nhibernate-mapping syscache2

我有以下情况:

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也会被缓存。

(所有其他子类都会像所描述的那样映射)

目前解决此问题的唯一方法是分解/更改继承更改,这在我们的设置中是不可能的。

非常感谢任何帮助/建议!

0 个答案:

没有答案