在應用程序啓動時觸發EF遷移使用實體框架遷移(Beta1),使用Update-Database命令在開發過程中都很好。通過代碼
但是,當應用程序在某個客戶的服務器上運行時,我真的希望我的應用程序在啓動時自動將其數據庫架構更新爲最新版本。
這可能嗎?文檔很少。
在應用程序啓動時觸發EF遷移使用實體框架遷移(Beta1),使用Update-Database命令在開發過程中都很好。通過代碼
但是,當應用程序在某個客戶的服務器上運行時,我真的希望我的應用程序在啓動時自動將其數據庫架構更新爲最新版本。
這可能嗎?文檔很少。
他們沒有提供一種方法來做到這一點,直到RTM,在這一點上他們已經承諾了一個命令行應用程序和msdeploy提供程序。 來源:http://blogs.msdn.com/b/adonet/archive/2011/11/29/code-first-migrations-beta-1-released.aspx
當然不滿足於是,PowerShell命令被保存在包裝目錄是純文本,它似乎只是加載存儲在同一目錄中的裝配稱爲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);
}
}
UPDATE:有點實驗後,我想通了一些事情
這意味着該代碼被簡化爲
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
方法。
請注意,這現在已過時,EF 4.3的RTM包含一個名爲MigrateDatabaseToLatestVersion的新數據庫初始化程序。有關更多信息,請參閱http://stackoverflow.com/questions/9281423/entity-framework-4-3-run-migrations-at-application-start。 – Betty 2012-02-18 23:16:48