Entity Framework 5.0 Code First Migrations を使用していますが、Update-Database の実行に問題があります。保留中のモデル変更があると表示されます。しかし、それは最新のはずなので、実行します
Add-Migration SomeMigrationName
ファイルを作成します...ただし、以前の移行の複製と本質的に同じファイルを作成します(そのファイルでUpdate-Databaseを再度試行すると、非-存在する制約)。さらに、DB 内のデータ モデルと __MigrationHistory テーブル内のレコードの存在の両方に基づいて、「元の」移行が実行されたことを確認できました。
データベース全体を削除し、自動または手動ですべての移行を再度実行すると、同じ問題が発生します。
私が持っていた「元の」移行ファイルは次のとおりです。
public partial class RenameLinkColumns : DbMigration
{
public override void Up()
{
DropForeignKey("dbo.Listing", "OfferedByUserId", "dbo.User");
DropIndex("dbo.Listing", new[] { "OfferedByUserId" });
AddColumn("dbo.Listing", "ListedByUserId", c => c.Int(nullable: false));
AddForeignKey("dbo.Listing", "ListedByUserId", "dbo.User", "UserId", cascadeDelete: true);
CreateIndex("dbo.Listing", "ListedByUserId");
DropColumn("dbo.Listing", "OfferedByUserId");
}
public override void Down()
{
AddColumn("dbo.Listing", "OfferedByUserId", c => c.Int(nullable: false));
DropIndex("dbo.Listing", new[] { "ListedByUserId" });
DropForeignKey("dbo.Listing", "ListedByUserId", "dbo.User");
DropColumn("dbo.Listing", "ListedByUserId");
CreateIndex("dbo.Listing", "OfferedByUserId");
AddForeignKey("dbo.Listing", "OfferedByUserId", "dbo.User", "UserId", cascadeDelete: true);
}
}
その Add-Migration を再度実行すると、そのファイルの Up/Down メソッドはこれらとまったく同じです。
マイグレーションが、ForeignKey 列の名前を変更したことを正しく検出できたことに、非常に感銘を受けました。しかし、それがこれを窒息させているのですか?
回避策があるようです。データベースとすべての移行ファイルを削除し、新しい「初期」移行を作成しましたが、可能であればこれを行いたくありません。
更新:これはこの問題の原因となった最新の移行ではありませんが、問題はマージ後に始まりました (私は一人で作業していますが、git についても学ぶためにブランチでチーム作業をシミュレートしています)、データベースを取得しようとしていますマージ。これは、マージ後に移行を特定の順序で配置したことが原因である可能性があります。ただし、移行は、空の DB を指定したときに実行された順序で期待どおりに機能しました。
さらに、この元の移行では、データを古い列から新しい列にコピーする必要があったため、テーブルにデータが含まれていたときに手動で微調整する必要がありました。ただし、そのファイルを手動で編集した場合としない場合でそのファイルをテストしたところ、記載されている動作にまだ遭遇しました。