6

私のチームと私は、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の移行を使用する場合のベストプラクティスは何ですか?

4

2 に答える 2

1

モデルで、ForeignKey 属性を使用して手動で外部キー名を指定しようとしましたか?

[ForeignKey("FK_RecebimentoMaterial_CompFab_ComponenteFabricante_Id")]
YourNavigationProperty
于 2013-10-05T13:54:26.780 に答える