質問: 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コマンドがありますか?ただし、移行方法はありませんか?** いいえ、これらのファイルを編集することはほとんどないので、必要はありません。