2016-08-23 9 views
2

OK、Google、私はそれをグーグルで見ることができません。 Documentationエンティティフレームワーク6. ModelCachingを無効にする

となります。そのコンテキストのモデルはキャッシュされ、それ以降のすべてのアプリケーションドメインのコンテキストに適用されます。このキャッシュは、指定されたModelBuidlerのModelCachingプロパティを設定することで無効にすることができます。

およびSO confirmsです。しかし、私はそれを行う方法を見つけることができません。私はただ一つのモデルを経て同じ構造を持ついくつかのログテーブルからデータを取得したいので、私のコードは

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)

我々はCTP5でCacheForContextTypeを削除し、我々はもともと人々が異なるモデルと同じ のAppDomainに同じコンテキストを使用したいときに使用すること にそれを意図しました。問題は、すべての初期化時に モデルを作成し、 シリーズのモデルをキャッシュし、各 の初期化中に使用するモデルを選択できないことです。モデルの作成は高価ですので、 のパターンを改善する必要がありました。

推奨するパターンは、使用するモデルごとに、ModelBuilder - > DbDatabaseMapping - > DbModelを外部に作成することです。コンテキストインスタンスの作成には、 DbModelをキャッシュして使用する必要があります。 ModelBuilder - > DbModelワークフローはちょっと面倒です。クラス名 は素晴らしいものではなく、RTMのために整理されています。

関連する問題