2012-04-10 79 views
11

我剛剛安裝了Entity Framework Migrations,爲某個類添加了一個屬性,並給了EF Migrations一個旋風。獲取初始實體框架遷移腳本

我的開發數據庫被及時更新。到現在爲止還挺好。

現在,我想爲此初始創建一個更改腳本,用於生產數據庫的Migrations。請注意,有一個預先存在的數據庫,因爲我將其應用於現有項目。

的遷移我已經是:

PM> Get-Migrations 
Retrieving migrations that have been applied to the target database. 
201204102238194_AutomaticMigration 
201203310233324_InitialCreate 
PM> 

我以爲我可以用得到的增量腳本如下:

Update-Database -SourceMigration:201203310233324_InitialCreate -TargetMigration:201204102238194_AutomaticMigration -script 

然而,這給我的錯誤:

'201204102238194_AutomaticMigration' is not a valid migration. Explicit migrations must be used for both source and target when scripting the upgrade between them.

爲了看看會發生什麼,我將這兩個參數(向後移動)顛倒過來,並得到了我的腳本ld期望在添加-force標誌後(新列被刪除)。

如何獲得第一次遷移的腳本?

+0

您是如何獲得初始遷移的?你的自動遷移應該包含爲整個數據庫創建腳本,這不是你想要的 - 在現有的數據庫結果上執行這樣的腳本會導致很多錯誤。你可以嘗試[這種方法](http://www.ladislavmrnka.com/2012/03/ef-4-3-migrations-and-existing-database)嗎? – 2012-04-11 08:49:13

+0

@Ladislav:我並不需要整個數據庫的腳本,因爲我的整個(初始)數據庫已經投入使用。我無法弄清楚的是如何在使用Migrations之前從已經在生產的第一個數據庫進行第一次更新。我確信Migrations在那裏有我的初始數據庫模式,因爲反轉SourceMigration和TargetMigration參數以及* -force *會創建一個腳本來刪除我的新列。我只是無法從初始數據庫轉到第一個新的迭代(添加那些少數列)。 – 2012-04-11 16:31:34

回答

14

開始在現有數據庫中使用EF遷移的正確方法是從添加包含當前數據庫元數據的空遷移開始。

我認爲你必須回滾到與初始數據庫模式兼容的模型。然後運行以下命令:

add-migration InitialSchema -IgnoreChanges 

這應該給你一個初始遷移,這並不算什麼,但包含當前模型的元數據。如果您已擴展代碼模型以覆蓋數據庫中已存在的更多表,則當然可以稍後使用-IgnoreChanges添加遷移。

一旦你完成了最初的遷移步驟,腳本就可以工作。

通常我不會推薦使用自動遷移,除非您只打算只使用自動遷移。如果您想對數據庫的更改進行某種控制(包括編寫腳本),那麼基於代碼的遷移就是一種方式。