エンタープライズにおけるエンティティ フレームワークに関する Julie Lermans コースで、彼女は次のような基本コンテキスト クラスを作成します。
Public class BaseContext<Tcontext> : DBContext where Tcontext :DBContext
{
static BaseContext()
{
Database.SetInitializer<TContext>(null);
}
Protected BaseContext()
:base("connectionStringName")
{}
}
これは次のように使用されます:
public class xxxContext : BaseContext<xxxContext>
{
public Field A { get;set;}
}
彼女は続けて、彼女のリポジトリでのデータベースの初期化は次のようになると言いました。
Database.SetInitializer(new MigrateDatabaseToLatestVersion<XXXXContext>())
using (var context = new xxxContext())
(
Assert.AreEqual(0, context.Customers.Count()));
)
私の質問は: コードの最後のセクション (この例) では、Database.SetInitializer が最初に実行され、MigrateDatabaseToLatestVersion を初期化子として設定します。ただし、コンテキストの作成では、基本クラスの静的コンストラクターは、コンテキストが実際に作成される前に (Database.SetInitializer(null)) を実行します。コードが context.Customers.Count() に到達するまでに、初期化子は NULL になり、デフォルトの初期化子が実行されます (CreateIfDatabaseNotExists)。
私が間違っている?MigrateDatabaseToLatestVersion はどのように保持されますか? それともそうですか?