2012-04-10 9 views
11

Entity Frameworkの移行をインストールし、クラスにプロパティを追加し、EF移行に渦を付けました。初期エンティティフレームワークの移行スクリプトの取得

開発データベースがすぐに更新されました。ここまでは順調ですね。

ここでは、このの変更スクリプトを作成して、本番データベースのマイグレーションの使用を使用したいと考えています。既存のプロジェクトにこれを適用したため、既存のデータベースがあることに注意してください。私が持っている

移行は、以下のとおりです。

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.

何が起こるかを見るために、私は2つのパラメータを逆にして(逆方向移行)、スクリプトを取得しました-forceフラグ(新しい列が削除された)を追加した後に期待してください。

この最初の移行のスクリプトはどのように入手できますか?

+0

どのように初期移行を行ったのですか?自動移行には、データベース全体のスクリプトを作成する必要があります。これは、既存のデータベースでこのようなスクリプトを実行すると、多くのエラーが発生します。代わりに[このアプローチ](http://www.ladislavmrnka.com/2012/03/ef-4-3-migrations-and-existing-database)を試すことができますか? –

+0

@Ladislav:私の全体(初期)データベースは既に稼働しているので、データベース全体のスクリプトは実際には必要ありません。私が理解できないことは、マイグレーションを初めて使用する前に、すでにプロダクションに入っている最初のデータベースから最初のアップデートに移動する方法です。 SourceMigrationとTargetMigrationのパラメータを* -forceとともに逆にすると、新しい列を削除するスクリプトが作成されるため、Migrationsには私の最初のDBスキーマがどこかにあるはずです。私は最初のデータベースから最初の新しい反復に移動することはできません(それらの少数の列を追加してください)。 –

答えて

14

既存のデータベースでEF移行を使用する正しい方法は、現在のデータベースのメタデータを含む空の移行を追加することから始めることです。

私は、最初のデータベーススキーマと互換性のあるモデルにロールバックする必要があると思います。

add-migration InitialSchema -IgnoreChanges 

あなたに何もしませんが、現在のモデルのメタデータを含む最初の移行を与える必要があります。次に、以下のコマンドを実行します。もちろん、データベースに既に存在するテーブルの多くをカバーするようにコードモデルを拡張した場合は、-IgnoreChangesで後で移行を追加することができます。

最初の移行手順を実行すると、スクリプトが機能します。

通常、自動移行のみを使用する場合を除いて、自動移行は使用しないことをお勧めします。データベースの変更(スクリプトの作成を含む)の変更を何らかの形で制御したい場合は、コードベースの移行が必要です。

関連する問題