私のチームと私は、Entity Framework Code First Migrationsを使用しているときに、開発(および間もなくクライアントの本番)データベースをモデルと同期させようとすると、多くの問題を抱えています。
DropForeignKey()メソッドの呼び出しに問題があったために、移行コードを手動で編集しなければならなかったときに、問題が発生し始めたようです。(私のプロジェクトはMySQL 5.5、MySQL Connector 6.6.2、EF 4.3を使用しています。)問題のあるコマンド:
DropForeignKey("Recebimento", "ComponenteFabricante_Id", "CompFab");
に変更されました:
DropForeignKey("Recebimento", "FK_RecebimentoMaterial_CompFab_ComponenteFabricante_Id");
それ以降、試行するたびにUpdate-Databse
、現在のモデルマッピングを反映するすべての移行コードがすでにあることがわかっている場合でも、次のメッセージが表示されます。「保留中の変更があり、自動であるため、現在のモデルに一致するようにデータベースを更新できません。移行は無効になっています。保留中のモデルの変更をコードベースの移行に書き込むか、自動移行を有効にします。自動移行を有効にするには、DbMigrationsConfiguration.AutomaticMigrationsEnabledをtrueに設定します。Add-Migrationコマンドを使用して、保留中のモデルの変更をコードに書き込むことができます。ベースの移行。」
AutomaticMigrationEnabled
に変更を使用したくないtrue
ので、何が作成されているかを確認するために実行Add-Migration Test
します。作成されたファイルには、(以前の移行によって)データベースにすでに適用されているコマンドが含まれています。この最後の移行を実行しようとするとUpdate-Database
失敗します(「列はすでに存在します」や「テーブルはすでに存在します」など、移行によってコードが重複しているため、正しいエラーメッセージです)。
この問題は、テーブル__migrationhistory
が[モデル]列に保存する値(移行によって適用されたモデルのバイナリ表現)に関係していると思われます。手動で修正されたため、値が正しい値ではない可能性があります。
移行コードを手動で編集して正しく機能させるにはどうすればよいですか?Entity Framework Code Firstの移行を使用する場合のベストプラクティスは何ですか?