2016-08-23 8 views
2

ОК, Google, я не могу его искать. Documentation говоритEntity Framework 6. Отключить ModelCaching

Модель для этого контекста затем кэшируется и предназначена для всех последующих экземпляров контекста в домене приложения. Это кэширование можно отключить, установив свойство ModelCaching на данный ModelBuidler

и SO confirms it. Но я не могу найти способ это сделать. Я должен отключить кэширование, потому что я хочу, чтобы получить данные из нескольких журналов таблицы с такой же структурой с помощью только одной модели, так что мой код выглядит

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); 
} 

но метод «OnModelCreating» только один раз, и я не могу перенастроить отображение таблицы. Так, может быть, есть еще один истинный способ выполнить мою задачу?

ответ

2

Вот ответ от менеджера программы команды Entity Framework.

Роуэн Миллер (MSFT)

Мы удалили CacheForContextType в CTP5, мы первоначально предполагалось его быть использованы, когда люди хотели использовать один и тот же контекст, в том же AppDomain с различными моделями. Проблема в том, что она создавала бы модель при каждой инициализации и не позволяла каким-либо образом кэшировать серии моделей и выбирать, какой из них использовать при каждой инициализации . Создание модели дорого, поэтому мы хотели продвинуть лучший образец.

Мы рекомендуем использовать внешний вид ModelBuilder -> DbDatabaseMapping -> DbModel для каждой модели, которую вы хотите использовать. DbModel следует кэшировать и использовать для создания экземпляров контекста. Рабочий процесс ModelBuilder -> DbModel немного запутан, а имена классов невелики, они будут убраны для RTM.

Смежные вопросы