6

最近を使用して作成したデータベースのローカルインスタンスがあるDbContext.Database.Create()ため、現在のコードに一致__MigrationHistoryするエントリを含むテーブルが存在します。InitalCreate

ただし、一部のコードベースの移行はMigrationsフォルダーに存在します。これらは、開発環境とステージング環境で実行され、これらのデータベースをコードと一致させます。ただし、現在のコードを使用してデータベースを作成したので、ローカルに適用する必要はありません。

モデルに変更を加え、対応する移行を作成する必要があります。しかし、実行する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. Migrationsフォルダーから他の移行を削除し、Add-Migrationコマンドを実行し、データベースをアップグレードしてから、古い移行を復元します。これは単純ですが、少しハックなようです。
  2. 最初の移行が適用されたソース管理のモデルのバージョンに戻し、これをビルドしてデータベースを作成します。次に、最新バージョンを入手し、すべての移行を適用します。これで、移行を追加する準備が整いました。これは大変な努力のようです!
  3. 移行を手動で作成します。

誰かがこれを管理する方法について何か提案がありますか?

4

5 に答える 5

2

オプション#1のバリエーションを使用することを計画しています...

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

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

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

これにより、ローカルデータベースの_MigrationHistoryが、そのデータベースにすでに組み込まれている変更で最新の状態になります。

しかし、それは応急修理であり、私たちはまだより良い解決策を探しています。

DadCat

于 2012-07-17T18:43:23.467 に答える
2

私が最もよく機能することがわかったのは非常に単純ですDbContext.Database.Create()。移行を有効にした後は使用しないでください。プログラムで新しいデータベースを作成する場合は、代わりに移行APIを使用してください。

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

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

于 2013-11-05T16:07:22.110 に答える
1

パッケージマネージャーコンソールから「」を実行update-databaseして変更をデータベースにプッシュするか、保留中の移行ファイル([201203271113060_AddTableX])を移行フォルダーから削除してから「add-migration」を再実行してブランドを作成する必要があります。編集内容に基づく新しい移行。

于 2015-11-23T16:15:36.047 に答える
0

私は同じ問題に遭遇しました。実行した場合

Update-database

その後、実行します

Add-Migration YourMigrationName

これは問題を解決します

于 2013-11-04T03:26:45.007 に答える
0

ソリューションファイルから古い移行ファイルを除外するだけです。

于 2017-04-05T20:49:02.580 に答える