2012-03-29 5 views
6

を使用して最近作成したデータベースのローカルインスタンスがあるため、InitalCreateエントリが現時点でのコードと一致する__MigrationHistoryテーブルが存在します。EF4.3コードの最初の移行で保留中の移行が無視される

ただし、コードベースの移行は[移行]フォルダ内に存在します。これらは開発およびステージング環境で実行され、これらのデータベースをコードに合わせて提供します。しかし、現在のコードを使用してデータベースを作成したので、ローカルに適用する必要はありません。

ここで、モデルを変更して、対応する移行を作成する必要があります。私はAdd-Migration TestMigrationを実行したときしかし、私はこのケースで何をすべき

Unable to generate an explicit migration because the following explicit 
migrations are pending: 

[201203271113060_AddTableX, 
201203290856574_AlterColumnY] 

Apply the pending explicit migrations before attempting to generate 
a new explicit migration. 

次のエラーを取得しますか?私がローカルに持っているものとバージョンが一致することが保証されていないので、別の環境でAdd-Migrationツールを指すことはできません。私が行った変更だけに合った移行が欲しい。

私がいくつかのオプションを持っていますが、どれも理想的ではないようだ。

  1. 古い移行を復元し、データベースをアップグレードし、アドインの移行コマンドを実行し、移行フォルダから他の移行を削除します。これは簡単ですが、ちょっとハッキリしているようです。
  2. 最初の移行が適用されたソースコントロール内のモデルのバージョンに戻し、ビルドしてデータベースを作成するために使用します。最新版を入手してすべての移行を適用したら、移行を追加する準備が整いました。これは多くの努力のようです!
  3. 手動で移行を作成します。

これを管理する方法についてご意見はありますか?私たちは、あなたのオプション#1のバリアントを使用することを計画している

答えて

2

は最高の作品の問題を解決するには非常に簡単です実行:あなたは有効にした後、DbContext.Database.Create()を使用していません移行。プログラムで新しいデータベースを作成する場合は、代わりにmigrations APIを使用します。

var migrator = new DbMigrator(new Configuration()); 
migrator.Update(); 

次に、完全な移行履歴があり、さらに移行を追加すると、期待どおりに機能します。

2

...

当社の標準操作手順は順番に、(更新 - データベースの-scriptオプションを使用して)各移行のためのSQLスクリプトを生成することですInstallShieldによってエンドユーザーの「本番」データベースに適用されるSQLスクリプトを作成する(開発者データベースのみにEF更新データベースを使用する予定)。

したがって、Migrationsフォルダ内のすべての移行について、Migration .csファイルと対応する.sqlファイルの両方があります。

(#1で提案したように)Migrationsフォルダから移行を削除するのではなく、SQL Mgmt Studioを使用して、挿入を行う.sqlファイルの一部だけを_MigrationHistoryに手動で適用します。

これにより、ローカルデータベースの_MigrationHistoryには、そのデータベースに既に組み込まれている変更が反映されます。

しかし、それは厄介であり、我々はまだより良い解決策を探しています。

DadCat

1

私は同じ問題に遭遇しました。 あなたが実行している場合

Update-database 

、その後

Add-Migration YourMigrationName 

これは私が見つけた何

+1

これは、 'DbContext.Database.Create()'を使用して作成されたデータベースでは、以前の移行操作を実行できないため機能しません。あなたの新しいローカルデータベースに既にその列があるので、 'SqlException'を取得し、関連する行が決して' __MigrationHistory'テーブルに追加されないように、移行を想像してみてください。正しいアプローチだと私の答えを見てください。 –

1

次のいずれかのデータベースに変更をプッシュするパッケージマネージャコンソールから「update-database」を実行する必要があるか、あなたの移行フォルダから保留中の移行ファイル([201203271113060_AddTableX])を削除してから再実行「を追加移行することができますあなたの編集内容に基づいて新しいマイグレーションを作成することができます。

0

ソリューションファイルから古い移行ファイルを単純に除外します。

関連する問題