EF7移行クラスとスナップショットの手動編集

code-first-migrations entity-framework-core

質問

EF7 migration addコマンド(date、beta5まで)は、 DbContextで定義されたモデルクラスと現在のモデルスナップショットを比較し、新しい移行クラスを作成し、モデルスナップショットを更新します。

異なるDDL SQLを生成するために、移行を変更する必要があります。たとえば、EF7はSQL Serverの自動インクリメント値のシーケンスを使用しており、IDを使用したいと考えています。しかしそれ以外の理由もあります。 migration removeコマンドは、マイグレーションファイルを物理的に削除し、モデルスナップショットを元に戻すので、この場合は役に立たない。

編集が必要なような関連コードを含む3つのファイルがあります:

  1. 主要な移行クラス: UpおよびDownメソッドを変更する必要があります。
  2. DbContextModelSnapshotファイルには、変更が必要なアノテーションが含まれています
  3. セカンダリマイグレーションの部分クラス: [migration].Designer.csのモデルスナップショットも悪い名前の[migration].Designer.csファイルに含まれています。私は、このスナップショットは、項目2のモデルスナップショットと一致する必要があると確信していますが、確かではありません。私がその目的について持っている唯一の情報は、 Briceのブログからです。「あなたは、プロバイダがマイグレーション中に追加情報を調べる必要がある場合に備えて」と述べています。

具体的な質問:

  1. マイグレーションを正しく実行するには、2つのモデルのスナップショットを同期させておく必要がありますか?
  2. 3つの別々のファイルを変更するだけで移行を編集できますか? (変更によっては、場合によってはモデルのスナップショットに触れる必要がない場合もあります)。
  3. モデルのスナップショットを再生成するEFコマンドがありますか?ただし、移行方法はありませんか?

受け入れられた回答

具体的な回答:

  1. マイグレーションを正しく実行するには、2つのモデルのスナップショットを同期させておく必要がありますか?
    いいえ、移行時のスナップショットはプロバイダ作成者にとって最後の手段です。たとえば、SQLiteでは列の名前を変更できないため、移行のモデルスナップショットを使用してこの操作のためにテーブルの再構築を行うことができます。 99%の時間、それはこれまで使用されません。

  2. 3つの別々のファイルを変更するだけで移行を編集できますか?
    ほとんどの場合、メインの移行ファイルを編集する必要があります。まれに、チーム環境で作業しているときにマージの競合が発生した場合は、モデルのスナップショットを編集する必要があります。デザイナーファイルは無視できます。マイグレーションに関するメタデータをキャプチャするだけです。

    モデルを正しく構成する場合は、何も編集する必要はありません。たとえば、シーケンスの代わりにIDを使用するには、 DbContext.OnModelCreating()をオーバーライドし、 modelBuilder.ForSqlServer().UseIdentity()を追加します。

  3. モデルのスナップショットを再生成するEFコマンドがありますか?ただし、移行方法はありませんか?
    いいえ、これらのファイルを編集することはほとんどないので、必要はありません。



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ