5

我爲我的實體框架應用程序啓用了遷移。現在,我想在遠程服務器上更新我的數據庫。我跑了這個命令:實體框架和遷移 - 如何更新遠程服務器上的數據庫?

PM> Update-Database -Script 

所以它生成了一個sql腳本。但是,這個腳本包含了我在數據庫中實際擁有的所有元數據,而不是所做的更改;所以,當我嘗試在遠程服務器上運行這個sql腳本時,它說表已經存在。

我怎樣才能生成sql腳本,這將只包含必要的更新?

回答

7

您可以針對此目標進行特定遷移。例如,如果您有一種名爲Foo的遷移,例如:

Update-Database -TargetMigration Foo -Script 

它將爲Foo遷移生成遷移腳本。將Foo替換爲您需要在該服務器上運行的任何遷移。

Add-Migration InitialMigration 
Add-Migration AddCustomers 
Add-Migration AddProjects 

比方說,你在你的項目中上述三個遷移,和本地數據庫具有所有這些應用,但遠程數據庫只有InitialMigration。您可以運行以下命令:

Update-Database -SourceMigration InitialMigration -TargetMigration AddProjects -Script 

這將適用於遠程服務器(AddCustomers和AddProjects)上的兩個遷移。

+0

我剛剛啓用了我的遷移,因此我沒有任何目標遷移,我是否需要先更新本地數據庫才能獲得該遷移? – ojek 2013-02-19 17:18:48

+0

如果您沒有任何遷移,那麼您究竟想要申請什麼? – Dismissile 2013-02-19 17:22:12

+0

您的編輯已清除。謝謝(你的)信息! :) – ojek 2013-02-19 17:44:18

1

如果你可以通過遠程桌面訪問服務器可以執行命令行遷移工具,它通常是在[projectFolder]研究發現/packages/EntityFramework.5.0.0/tools/migrate.exe

而且這樣稱呼它:

Migrate.exe [StartupProjectName] /StartupDirectory:"[BIN folder path]" /ConnectionStringName:"[Connection String Name]" /StartupConfigurationFile:"[Path to web or app.config]" 
1

您可以使用MigrateDatabaseToLatestVersion初始化器會自動應用任何新的遷移,當你部署應用程序的新版本:

Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDbContext, Configuration>()); 
相關問題