Entity Framework Migrations(Beta1)を使用し、Update-Databaseコマンドを使用することは、開発中にすべて適切です。
しかし、アプリケーションがどこかの顧客のサーバーで実行されている場合、アプリケーションの起動時にデータベーススキーマを最新バージョンに自動的に更新する必要があります。
これは可能ですか?ドキュメントが不足しています。
Entity Framework Migrations(Beta1)を使用し、Update-Databaseコマンドを使用することは、開発中にすべて適切です。
しかし、アプリケーションがどこかの顧客のサーバーで実行されている場合、アプリケーションの起動時にデータベーススキーマを最新バージョンに自動的に更新する必要があります。
これは可能ですか?ドキュメントが不足しています。
彼らは、RTMまでこれを行う方法を提供していません。その時点で、コマンドラインアプリとmsdeployプロバイダーを約束しました。ソース: http: //blogs.msdn.com/b/adonet/archive/2011/11/29/code-first-migrations-beta-1-released.aspx
もちろん、これに満足していません。powershellコマンドはpackagesディレクトリに格納されており、プレーンテキストです。同じディレクトリに格納されているEntityFramework.Migrations.Commandsというアセンブリをロードするだけのようです。
そのアセンブリをたどって、私は次のことを思いついた
public class MyContext : DbContext
{
static MyContext()
{
DbMigrationsConfiguration configuration = new DbMigrationsConfiguration() {
MigrationsAssembly = typeof(MyContext).Assembly,
ContextType = typeof(MyContext),
AutomaticMigrationsEnabled = true,
};
DbMigrator dbMigrator = new DbMigrator(configuration);
dbMigrator.Update(null);
}
}
更新:少し実験した後、私はさらにいくつかのことを理解しました
これは、コードが次のように簡略化されていることを意味します
DbMigrator dbMigrator = new DbMigrator(new NAMESPACE.TO.MIGRATIONS.Configuration());
dbMigrator.Update(null);
この問題の別のオプションは、追加することです
Database.SetInitializer<MyContext>(new MigrateDatabaseToLatestVersion<MyContext, NAMESPACE.TO.MIGRATIONS.Configuration>());
Global.asax
Application_Start
あなたのメソッドに線を引きます。