質問: 私は、EFコアでASP.NET Core 1.0アプリケーションを開発する際に選択できるさまざまなタイプの移行パスを理解しようとしています。最初のCoreアプリケーションを作成したとき、ModelBuilderを使用してモデルを構築するApplicationDbContextModelSnapshotクラスが生成されていることがわかりました。 次に、データベースにテーブルを追加する必要がある場合は、新しいモデルを作成し、コマンドラインを実行して移行ファイルを生成し、データベースを更新する必要があることを読んでいます。さて、私はそれをこの時点までにします。 しかし、私がそうすると、ApplicationDbContextModelSnapshotクラスも更新されていることに気付きました。 1)これは、毎回再生されるように見えるので、このApplicationDbContextModelSnapshotクラスを変更できないということですか? 2)データアノテーションを使用してモデルを構築するか、Fluent APIを使用してApplicationDbContextクラスでモデルを構築する必要がありますか?ハァッ?モデルを構築する別のファイルですか? 私はここでデータベース、スナップショットクラス、データアノテーション、および流暢なAPIを扱う3つの異なる方法を見ています。私は混乱しています。今日、私は最後のマイグレーションファイルで間違いを犯したので、ファイルを削除し、データベースを落としてデータベースの更新を再開しました。 しかし、これを行うことで、私は次のようなエラーが出ます: ``` The index 'IX_Transaction_GiftCardId' is dependent on column 'GiftCardId'. ALTER TABLE ALTER COLUMN GiftCardId failed because one or more objects access this column. ``` 当然、私はApplicationDbContextModelSnapshotクラスを変更しなければならないかどうか疑問に思っていました。 これらの3つのパスが私を混乱させるため、移行やデータベースの更新に関して、私が取るべき道は何ですか。
回答: `ApplicationDbContextModelSnapshot`変更しないでください。これは設計時のアーティファクトであり、マージ競合の場合にのみ変更する必要があります。 モデルを更新するには、常にデータ注釈や流暢なAPIを使用します。 EF Migrationワークフローの詳細については、「 コードの最初の移行 」を参照してください。それはEF6のためですが、情報の大部分はまだ関連しています。