Entity Framework 6. Disable ModelCaching

2019-02-26 04:28发布

OK, Google, I am not able to googling it. Documentation says

The model for that context is then cached and is for all further instances of the context in the app domain. This caching can be disabled by setting the ModelCaching property on the given ModelBuidler

and SO confirms it. But i can't find way to do it. I have to disable caching because i want to get data from several log table with same structure via just one model, so my code looks like

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

and configure with

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Log>().ToTable(_tableName);
}

but 'OnModelCreating' method called just once and i can not reconfigure table mapping. So maybe there is another true-way to do my task?

1条回答
Summer. ? 凉城
2楼-- · 2019-02-26 04:56

Here is the answer from the Program Manager of the Entity Framework team.

Rowan Miller (MSFT)

We removed CacheForContextType in CTP5, we originally intended it to be used when folks wanted to use the same context in the same AppDomain with different models. The issue is that it would create the model on every initialization and didn't allow any way to cache a series of models and choose which one to use during each initialization. Model creation is expensive so we wanted to promote a better pattern.

The pattern we recommend is to externally create a ModelBuilder -> DbDatabaseMapping -> DbModel for each model you want to use. The DbModel should be cached and used to create context instances. The ModelBuilder -> DbModel workflow is a little messy and the class names aren't great, they will be tidied up for RTM.

查看更多
登录 后发表回答