将 NCache 4.6 与 EF 6.1.3 一起使用,无法使其与 NCache API 一起使用。
它在内部使用查询策略efcaching.ncconf
但仅使用api-level-caching
和.Cache()
方法时有效,对缓存无效。
我采取的步骤:
增加Alachisoft.Integrations.EntityFramework.CachingProvider
了对项目的引用。
添加拦截器:
<interceptors>
<interceptor type="Alachisoft.NCache.Integrations.EntityFramework.Caching.EFCommandInterceptor, Alachisoft.Integrations.EntityFramework.CachingProvider" />
</interceptors>
将命名空间添加Alachisoft.NCache.Integrations.EntityFramework.Caching
到文件。
最后,使用他们的EntityDataModel
示例,例如,更改PrintCustomerList(customerQuery);
为PrintCustomerList(customerQuery.Cache());
,但结果没有被缓存。
更新 1:
检查dumpcachekeys.exe
,它实际上已经为我的查询创建了缓存,但它仍然进入数据库以获取结果。
更新 2:
尝试转储现金数据dumpcachedata.exe
失败并出现以下错误:
Items in cache : 3
Error: Failed to resolve assembly: EntityFrameworkDynamicProxies-EntityDataModel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
System.Exception: Failed to resolve assembly: EntityFrameworkDynamicProxies-EntityDataModel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
at Alachisoft.NCache.Tools.DumpCacheData.DumpCacheData.MakeBackup(Cache cache, String path)
at Alachisoft.NCache.Tools.DumpCacheData.DumpCacheData.Run(String[] args)
更新 3
禁用示例实体框架中的动态代理EntityDataModel
,解决了抛出的错误dumpcachedata.exe
,现在现金数据成功转储。但是仍然缓存的查询会导致数据库跳闸。