3

EF 4.1 では、EF がすべてのクエリでデータベース メタデータをクエリしないようにするために、IncludeMetadataConvention を削除していました。

EF 5 では、IncludeMetadataConvention が廃止されているという警告が表示されます。LinqPad では、EF が使用するたびに移行履歴を照会していることがわかります。私はデータベースの最初のプロジェクトに取り組んでいます(ただし、POCOとDbContextを使用しています)。これらの余分なクエリのオーバーヘッドは必要ありません。それらをオフにするにはどうすればよいですか?

更新 を呼び出すことで、dbContextごとにこれを無効にできることがわかりました

System.Data.Entity.Database.SetInitializer<theDbContext>(null);

ただし、初期化をグローバルに無効にできるようにしたいと考えています (大規模なアプリを想像してみてください。本番環境にデプロイするときに、これらのクエリを実行していない (そしてデータベースを作成しようとしていない) ことを確認したいです)。

4

2 に答える 2

2

大規模なアプリケーションのすべてのコンテキスト タイプに対してこれを行う必要がある場合は、すべてのアセンブリを通過するコードを作成し、派生したすべてのタイプを見つけて、見つかったすべてのタイプのDbContextリフレクションを通じてその呼び出しを呼び出すことができます。

ところで。EF 4.3以降、構成から初期化子を変更することもできますが、通常は複数のイニシャライザを持っていないため、コンテキストごとに変更されます。

于 2013-03-05T18:54:26.153 に答える
1

コードを DbContext クラスのコンストラクターに入れてみませんか?

これを行うだけでなく、パラメーターを設定して AutoDetectChangesEnabled、LazyLoading、および Proxy CreationEnabled を無効にします。

于 2014-02-13T19:23:09.420 に答える