具有多个项目的EFCache

时间:2016-05-23 05:33:26

标签: c# entity-framework caching

我有一个包含WCF,控制台和网站等多个项目的解决方案。我正在为所有这些使用实体框架和一个dbcontext。 我试图使用EFCache作为实体框架的二级缓存。问题是当我从其中一个项目中插入新记录时,其他人无法在更改后重新加载新添加的数据。 例如,我通过WCF服务将新记录添加到我的数据库中,当我尝试从网站加载数据时,新添加的数据不会加载,网站也有自己的efcache。

请帮帮我......

谢谢

1 个答案:

答案 0 :(得分:0)

如果Dal组件在所有客户端UI共享的服务器上运行,那么您可能遇到类似的问题。

我在我的Dal项目中将建议的代码添加到我的DbConfiguration启动方法中,然后实现了我的一个特定的Dal方法来使用缓存。

//Add 2nd level cache support
var transactionHandler = new CacheTransactionHandler(new InMemoryCache());
AddInterceptor(transactionHandler);

var cachingPolicy = new CachingPolicy();
    Loaded +=
      (sender, args) => args.ReplaceService<DbProviderServices>(
         (s, _) => new CachingProviderServices(s, transactionHandler,
                  cachingPolicy));

我正在维护最近查看的记录列表,并注意到我正在查看的记录没有被记住。调试它似乎运行EF查询但它没有获取所有记录。 SQL分析器中没有显示任何内容,因此我意识到它的缓存比我想要的要多得多。

无论如何,我从DbConfiguration中删除了上面的代码,并在Dals中使用了EFCache.InMemoryCache本地,我想要缓存支持。

希望有所帮助。