C# 实体框架6。禁用模型缓存

C# 实体框架6。禁用模型缓存,c#,entity-framework,caching,entity-framework-6,C#,Entity Framework,Caching,Entity Framework 6,好的,谷歌,我不能用谷歌搜索它。说 然后缓存该上下文的模型,并用于应用程序域中上下文的所有其他实例。可以通过在给定的ModelBuidler上设置ModelCaching属性来禁用此缓存 就这样。但我找不到办法。我必须禁用缓存,因为我想通过一个模型从多个具有相同结构的日志表中获取数据,所以我的代码如下 logTableNames.ForEach(n => { using (var context = new LogContext(n)) { Console.

好的,谷歌,我不能用谷歌搜索它。说

然后缓存该上下文的模型,并用于应用程序域中上下文的所有其他实例。可以通过在给定的ModelBuidler上设置ModelCaching属性来禁用此缓存

就这样。但我找不到办法。我必须禁用缓存,因为我想通过一个模型从多个具有相同结构的日志表中获取数据,所以我的代码如下

logTableNames.ForEach(n =>
{
    using (var context = new LogContext(n))
    {
        Console.WriteLine($"Project: {n} -- {context.Logs.Count()} rows.\n");
    }
});
并配置为

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Log>().ToTable(_tableName);
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity().ToTable(_tableName);
}

但“OnModelCreating”方法只调用了一次,我无法重新配置表映射。因此,也许还有另一种真正的方法来完成我的任务?

以下是实体框架团队项目经理的答案

罗文米勒(MSFT)

我们在CTP5中删除了CacheForContextType,我们最初打算这样做 当人们想要在相同的环境中使用相同的上下文时使用 不同型号的AppDomain。问题是,这会造成 在每次初始化时建模,并且不允许任何方式缓存 一系列模型,并选择在每个过程中使用哪一个 初始化。模型创建成本很高,所以我们想推广 更好的模式

我们建议的模式是从外部创建ModelBuilder-> DbDatabaseMapping->DbModel,用于要使用的每个模型。这个 DbModel应该被缓存并用于创建上下文实例。这个 ModelBuilder->DbModel工作流有点混乱,类名 不是很好,它们会被整理好进行RTM