35

TFSを使用しており、開発者用にさまざまなブランチがあります。

  1. ブランチAでは、列サイズを変更するために移行を行いました

  2. ブランチBでは、新しいテーブルを追加するために移行を行いました。このブランチはブランチAの変更について知りません!!

  3. 両方の変更がメインブランチにマージされます。

データベースの更新を行うと、2つの移行が行われますが、最後に保留中の変更があることが通知されます。Add-Migrationを実行すると、最初の移行(ブランチA)と同じものが作成されます。

保留中の変更があり、自動移行が無効になっているため、現在のモデルに一致するようにデータベースを更新できません。保留中のモデル変更をコードベースの移行に書き込むか、自動移行を有効にします。自動移行を有効にするには、DbMigrationsConfiguration.AutomaticMigrationsEnabledをtrueに設定します。Add-Migrationコマンドを使用して、保留中のモデル変更をコードベースの移行に書き込むことができます。

最初の移行について知らなかったため、前回の移行のプロパティTarget de IMigrationMetadataのコンテンツに何かが欠落しているためですか?

異なるTFSブランチで移行を処理することは可能ですか?

4

3 に答える 3

36

EF移行ステップには、移行ステップの結果であるモデルの署名を持つメタデータファイルが含まれています。マージ時の問題は、ブランチBで行われた移行の署名に、ブランチAで行われた移行で行われたものが含まれていないことです。移行がブランチで行われている限り、これは正しいです。マージすると間違ってしまいます。

これを修正するには、後者の移行のメタデータを次のように再生成する必要があります。

add-migration MyMigrationName

add-migrationパラメータを指定せずに既存の移行で実行-forceすると、メタデータのみが再生成されます。

EF Migrationsのマージシナリオの詳細なウォークスルーと、ブログのMergeConflictの投稿を書きました。

于 2012-05-01T06:50:40.107 に答える
1

Anders Abelの回答に加えて、最後の移行メタデータを再生成しようとしたときに問題が発生した場合は、EFが1を追加した別の移行を作成します。

完全な日付/タイムスタンプを含める必要があります。

例えば

以前の移行のファイル名が201701011322_MakeChangesToPotatoTableの場合

次に、「Add-Migration」コマンドにフルネームを適切に含める必要があります。

IE

Add-Migration 201701011322_MakeChangesToPotatoTable
于 2017-02-08T14:20:23.953 に答える
0

EFコアを使用すると、モデルの現在の状態が***ModelSnapshot.csに保持されます。通常はマージされるため、競合がない限り、何もする必要はありません。

于 2019-12-02T21:08:14.033 に答える