多くの人は、以下に示すコードを使用する必要がある理由をおそらく認識しています。ただし、このロジックをレイヤーに分離したいので、Web レイヤーで Entity Framework DLL を参照したくないため、このコードをDbContext
クラスの静的コンストラクターに配置することになりました。
これは悪い考えですか?これを行うことでアプリのパフォーマンスに影響はありますか?
Database.SetInitializer<DataContext<T>>(null);
多くの人は、以下に示すコードを使用する必要がある理由をおそらく認識しています。ただし、このロジックをレイヤーに分離したいので、Web レイヤーで Entity Framework DLL を参照したくないため、このコードをDbContext
クラスの静的コンストラクターに配置することになりました。
これは悪い考えですか?これを行うことでアプリのパフォーマンスに影響はありますか?
Database.SetInitializer<DataContext<T>>(null);
言及する価値のあるパフォーマンス ヒットはありません。静的コンストラクターは、アプリケーションに対して 1 回呼び出され、最初のクラス インスタンスが作成されるときに呼び出されます。私はほとんどのアプリケーションでこれを行っていますが、まだ問題に気づいていません。
呼び出し元の Web レイヤー アセンブリで EF への参照を持たずに、データ レイヤーの静的メソッドを介してこの行を呼び出すこともできます。
この行は初期化子への内部参照を設定するだけで、高価なことは何もしていないと思います。コストのかかる作業 (EF モデルの検出と構築) は、最初のコンテキスト インスタンスが使用されるときに行われます。
補足として、アプリケーションの開始時にこの高価な作業を行うことは、アプリケーションの開始時に遅延を発生させ、ユーザーがアプリケーションで最初のクエリを実行しているときにそれを回避するために望ましい場合があります。初期化を強制するには、初期化子を設定するだけでなく、初期化自体も実行します。たとえば、次のようになります。
Database.SetInitializer<DataContext>(null);
using (var context = new DataContext())
{
context.Database.Initialize(false);
}