我想配置我的查找表使用NHibernate的二级缓存提供程序SysCache2和SqlCacheDependency的缓存。NHibernate查找表缓存+ SqlCacheDependency
我在单个国家的表上测试我的框架,但阅读NHibernate的日志让我明白,缓存不起作用..而我不知道为什么。
我无言以对:/
的SqlCacheDependency是在数据库和表LUT_Countries启用。
的Web.Config:
<system.web>
<compilation debug="true" targetFramework="4.0" />
<caching>
<sqlCacheDependency enabled="true" pollTime="30000"> <!-- -->
<databases>
<clear />
<add name="Default" connectionStringName="Test" />
</databases>
</sqlCacheDependency>
</caching>
</system.web>
<syscache2>
<cacheRegion name="CountriesRegion" relativeExpiration="604800">
<dependencies>
<tables>
<add name="Countries" databaseEntryName="Default" tableName="LUT_Countries" />
</tables>
</dependencies>
</cacheRegion>
</syscache2>
流利的配置:
_baseConfiguration = Fluently.Configure()
.ExposeConfiguration(c =>
{
c.SetProperty("connection.isolation", "ReadCommitted");
c.SetProperty("show_sql", "true");
c.SetProperty("format_sql", "true");
})
.Database(MsSqlConfiguration.MsSql2008.ConnectionString(_connectionString))
.Cache(c => c.ProviderClass<SysCacheProvider>()
.UseSecondLevelCache()
.UseQueryCache());
NHibernate的国家流利的映射:
public class CountryMap : ClassMap<Country>
{
public CountryMap()
{
Cache.IncludeAll().ReadOnly().Region("CountriesRegion");
Table("LUT_Countries");
Id(c => c.Code);
Map(c => c.Name);
Map(c => c.Alpha3IsoCode).Column("Alpha3_IsoCode");
Map(c => c.NumericCode);
}
}
NHibernate的日志:
...
14:20:53.544:DEBUG:缓存:CountriesRegion使用策略:只读
14:20:53.546:WARN:只读配置用于可变缓存:CountriesRegion
14:20 :53.551:DEBUG:建筑缓存区域, 'CountriesRegion',从配置
14:20:53.559:DEBUG:配置高速缓存区域
14:20:53.559:DEBUG:使用优先:默认
14:20:53.559:DEBUG:使用相对到期:7.00:00:00
14:20:53.571:DEBUG:配置SQL表依赖性, '国家' 使用表 'LUT_Countries',和数据库条目。 '默认'
...
14:20:53.811:DEBUG:初始化类SessionFactoryObjectFactory
14:20:53.813:DEBUG:注册:311e0b6b7e7a41b289b4347267f963f9(未命名)
14:20 :53.813:INFO:没有名字配置
14:20:53.813:DEBUG:实例化会话工厂
14:20:53.817: INFO:开始更新在区域时间戳缓存:UpdateTimestampsCache
14:20:53.817:DEBUG:建筑非配置的高速缓存区域:UpdateTimestampsCache
14:20:53.817:DEBUG:配置高速缓存区域
14 :20:53。817:调试:没有使用默认指定的优先级:默认
14:20:53.817:DEBUG:00:05:00
14:20:53.819:INFO:开始查询缓存在使用默认指定没有到期区域:NHibernate.Cache.StandardQueryCache
14:20:53.819:DEBUG:建筑非配置的高速缓存区域:NHibernate.Cache.StandardQueryCache
14:20:53.819:DEBUG:配置高速缓存区域
14:20:53.819:DEBUG:没有使用默认指定的优先级:默认
14:20:53.819:DEBUG:00:05:00
14:20:53.825:DEBUG:使用默认指定没有到期检查0命名HQL查询
14:20:53.825:DEBUG:在时间戳[会话id = 76cd9097-abc6-49f4-9fcb-2f5a0ca446ae]打开的会话:命名SQL检查0查询
14:20:53.868:DEBUG 5622576143695872,用于会话工厂:[/ 311e0b6b7e7a41b289b4347267f963f9]
14:20:54.169:DEBUG:表达式(部分评估):值(NHibernate.Linq.NhQueryable`1 [Web.DataAccess.ORM.Models.Country])
14:20:54.191:DEBUG:无法将HQL查询计划定位到缓存中;生成(NHibernate.Linq.NhQueryable`1 [Web.DataAccess.ORM.Models.Country])
14:20:54.922:DEBUG:选择< <开始[级别= 1,语句=选择]
14:20:54.957:DEBUG:FromClause {级别= 1}:Web.DataAccess.ORM.Models.Country(0) - > country0
14:20:54.992:DEBUG:解决:0 - > country0。代码
14:20:55.000:DEBUG:select:finish up [leve L = 1,语句=选择]
14:20:55.004:DEBUG:processQuery():(SELECT({选择子句} country0_.Code)(FromClause {级别= 1} LUT_Countries country0_))
14:20:55.065:DEBUG:使用从片段[LUT_Countries country0_]
14:20:55.070:DEBUG:选择>>端[级别= 1,语句=选择]
14:20:55.073: DEBUG:throwQueryException():无错误
14:20:55.199:DEBUG:SQL:select country 0_.Code如Code1_,country0_.Name如Name1_,country0_.Alpha3_IsoCode如Alpha3_1_,country0_.NumericCode如NumericC4_1_从LUT_Countries country0_
14:20:55.199:DEBUG:throwQueryException():没有错误
14: 20:55.255:DEBUG:位于缓存中的HQL查询计划(NHibernate.Linq.NhQueryable`1 [Web.DataAccess.ORM.Models。国家])
14:20:55.263:DEBUG:发现:NHibernate.Linq.NhQueryable`1 [Web.DataAccess.ORM.Models.Country]
...
14:20: 55.639:DEBUG:结果集行:11
14:20:55.639:DEBUG:返回 'AP' 为柱:Code1_
14:20:55.639:DEBUG:结果列:的EntityKey [Web.DataAccess。 ORM.Models.Country#AP]
14:20:55.639 DEBUG:从DataReader初始化对象:[Web.DataAccess.ORM.Models.Country#AP]
14:20:55.639:调试:保湿实体:[Web.DataAccess.ORM.Models .Country#AP]
14:20:55.639:DEBUG:返回 '亚洲/太平洋地区' 为列:Name1_
14:20:55.639:DEBUG:返回 'AP' 作为列:Alpha3_1_
14:20:55.639:DEBUG:返回'0'列:NumericC4_1_
14:20:55.639:DEBUG:结果集行:12
...
14:20:55.701:DEBUG:封闭的IDataReader,开放IDataReaders:0
14:20:55.702: DEBUG:20:55.704:DEBUG:封闭IDbCommand的,开放的IDbCommands:0
14:20:55.707:DEBUG:积极释放数据库连接
DataReader的是后290毫秒14关闭3210
14:20:55.707:DEBUG:关闭连接
14:20:55.713:DEBUG:总对象的水合:251
14:20:55.722:DEBUG:解决用于关联[Web.DataAccess.ORM .Models.Country#A1]
14:20:55.730:DEBUG:将实体到第二级高速缓存:[Web.DataAccess.ORM.Models.Country#A1]
14:20:55.736: DEBUG:缓存:Web.DataAccess.ORM.Models.Country#A1
14:20:55。 740:DEBUG:未找到区域的根缓存项目。
14:20:55.744:DEBUG:创建缓存区域根高速缓存条目:CountriesRegion
14:20:55.745:DEBUG:变更通知谋取缓存依赖性
14:20:56.042:DEBUG :将缓存依赖关系附加到根缓存条目。当检测到更改时,缓存条目将被删除。
14:20:56.045:DEBUG:添加新数据:key = NHibernate-Cache:CountriesRegion:Web.DataAccess.ORM.Models.Country#[email protected] & value = NHibernate。Cache.Entry.CacheEntry
14:20:56.047:DEBUG:项目将在到期:2013年7月8日17点20分56秒
14:20:56.058:DEBUG:做物化实体[网络。 DataAccess.ORM.Models.Country#A1]
14:20:56.061:DEBUG:解析为[Web.DataAccess.ORM.Models.Country#A2]
14协会:20:56.061:DEBUG:将实体添加到二级缓存:[Web.DataAccess.ORM.Models.Country#A2]
14:20:56.061:DEBUG:Cach ing:Web.DataAccess.ORM.Models.Country#A2
... .. 。
第二次运行,在一个新的SQL查询结果5秒后,同第一, 和此输出许多以下日志的(返回值,并在高速缓存中注册:
15:17:34.076:DEBUG:[会话id = e1feb78d-6c3e-40a4-8b46-6d5742bd0f85]使用时刻打开的会话:5622590071095296,用于会话工厂:[/ 0ee3e73fbf6741d28adcff632c68b671]
15:17:34.077:DEBUG:表达式(部分评估):值(NHibernate。 Linq.NhQueryable`1 [Web.DataAccess.ORM.Models.Country])
15:17:34.077:DEBUG:位于缓存中的HQL查询计划(NHibernate.Linq.NhQueryable`1 [Web.DataAccess.ORM。 Models.Country])
15:17:34.077:DEBUG:在高速缓存位于HQL查询计划(NHibernate.Linq.NhQueryable`1 [Web.DataAccess.ORM.Models.Country])
15时17分:34.077:DEBUG:发现:NHibernate.Linq.NhQueryable`1 [Web.DataAccess.ORM.Models.Country]
15:17:34.077:DEBUG:命名参数:{}
15:17:34.077:DEBUG:打开新IDbCommand的,开放IDbCommands:1
15:17:34.077:DEBUG:构建为一个的SqlString对象IDbCommand的:选择country0_.Code如Code1_,country0_.Name如Name1_ ,country0_.Alpha3_IsoCode如Alpha3_1_,country0_.NumericCode如NumericC4_1_从LUT_Countries country0_
15:17:34.077:INFO:选择country0_.Code如Code1_,country0_.Name如Name1_,country0_.Alpha3_IsoCode如Alpha3_1_,country0_.NumericCode如NumericC4_1_ from LUT_Countries country0_
15:17:34.078:DEBUG:从驱动程序获取IDbConnection
15:17:34.079:DEBUG:的ExecuteReader耗时1毫秒
15:17:34.079:DEBUG:打开的IDataReader,开放IDataReaders:1
15:17:34.079:DEBUG:加工结果集
15:17:34。079:调试:结果集行:0
15:17:34.080:DEBUG:返回 'A1' 作为柱:Code1_
15:17:34.080:DEBUG:结果列:的EntityKey [Web.DataAccess。 ORM.Models.Country#A1]
15:17:34.080:DEBUG:从初始化的DataReader对象:[Web.DataAccess.ORM.Models.Country#A1]
15:17:34.080:DEBUG:保湿实体:[Web.DataAccess.ORM.Models.Country#A1]
15:17:34.080:DEBUG:returns'Anonym的OU代理”作为柱:Name1_
15:17:34.080:DEBUG:返回 'A1' 作为柱:Alpha3_1_
15:17:34.080:DEBUG:返回 '0' 作为柱:NumericC4_1_
15:17:34.080:DEBUG:结果集行:1
...