今日私は奇妙な状況に陥りました。新しいデータベースで既存のデータベースを更新しているうちに、ASP.NET - コードファーストデータベースの更新中に予期しない列が表示される
Raport.cs
public class Raport { [DatabaseGenerated(DatabaseGeneratedOption.None)] [Key] public string raport_id { get; set; } //id raportu public string userID { get; set; } public DateTime creation_time { get; set; } public DateTime last_modyfication { get; set; } public virtual ICollection<ThrashType> ThrashType { get; set; } public virtual UserFrontInfo UserFrontInfo { get; set; }
}
ThrashType.cs
public class ThrashType { [Key] //[DatabaseGenerated(DatabaseGeneratedOption.None)] public int IdTrash { get; set; } public string RaportId { get; set; } public string ClassName { get; set; } public int Quantity { get; set; } public string Information { get; set; } public virtual Raport Raport { get; set; } }
UserFrontInfo.cs:それはどのように見えた
public class UserFrontInfo { [DatabaseGenerated(DatabaseGeneratedOption.None)] [Key] public string userId { get; set; } public string userName { get; set; } public string whereFromName { get; set; } public virtual ICollection<Raport> Raport { get; set; } }
私はこのような状況に実行する前にやった: 1 /追加の移行 2 /私はこれを、その後新しいテーブルを追加するために必要なことから: Reset Entity-Framework Migrations (答えの下で第一コメント。より読みやすいバージョン):このためグレッグガムに
クレジット(https://stackoverflow.com/users/425823/greg-gum)
問題:あなたは、あなたの移行をアップマックしていると、あなたは 、既存のテーブルを削除せずにそれをリセットしたいと思います。問題: EFが にテーブルを最初から作成したいので、データベース内の既存のテーブルを使用して移行をリセットすることはできません。対処:Migrations_Historyテーブルから既存の移行 を削除してください。 移行フォルダから既存の移行を削除します。追加マイグレーションリセットを実行します。これにより、テーブル の作成を含む の移行フォルダがマイグレーションフォルダに作成されます(ただし、実行されないため、エラーは発生しません)。 EFに スナップショットがあるようにMigrationHistoryテーブルの最初の行を作成する必要があります。現在の状態の の移行を適用すると、EFがこれを行います。ただし、データベースにテーブルがすでに存在するため、 を作成したばかりの移行は適用できません。だから移行 に行き、 "Up"メソッド内のすべてのコードをコメントアウトしてください。今すぐ update-databaseを実行します。移行を適用し(実際には データベースを変更しない)、MigrationHistoryにスナップショット行を作成します。 これで移行がリセットされ、通常の の移行が続行される可能性があります。
それから、すべてが完全に機能しましたが、ThrashTypeテーブルには「Raport_raport_id」という名前の列が追加されています。