我使用實體框架5遷移刪除與遷移的關係。我的模型是這樣的:實體框架
UserRegistration
Sessions
對於每個登記可以有很多的會議。我在嘗試運行遷移當SQL級聯問題刪除錯誤,所以我試圖刪除級聯通過添加以下代碼刪除:
modelBuilder.Entity<UserRegistration>()
.HasOptional(x => x.Sessions)
.WithMany()
.WillCascadeOnDelete(false);
現在,如果你知道EF,你可以看到一個錯誤碼。我認爲這是給我一個1從UserRegistrations到會話一對多的關係,而事實上,這個代碼表示「每個放在userRegistration有一個可選的會議,每個會議有許多UserRegistrations」。所以我的一對多關係走錯了路。我相信這應該是我添加的代碼。
modelBuilder.Entity<UserRegistration>()
.HasMany(x => x.Sessions)
.WithRequired(x => x.UserRegistration)
.WillCascadeOnDelete(false);
然而,當我刪除惡意代碼(第一塊以上),並運行添加遷移,我得到這個:
public override void Up()
{
DropForeignKey("dbo.UserRegistrations", "Sessions_Id", "dbo.UserRegistrationSessions");
DropIndex("dbo.UserRegistrations", new[] { "Sessions_Id" });
RenameColumn(table: "dbo.UserRegistrationSessions", name: "Sessions_Id", newName: "UserRegistration_Id");
}
前兩行(DropForeignKey和DropIndex)看起來不錯,這是從UserRegistrations表中刪除外鍵。然而,第三條線從哪裏來。 UserRegistrationSessions表中沒有Sessions_Id列。當我運行它,我果然得到一個錯誤:
Either the parameter @objname is ambiguous or the claimed @objtype (COLUMN) is wrong.
我想的東西是我的模型,我構建器的代碼之間的失衡。也許我需要嘗試讓我的模型看起來不正確,但匹配模型構建器代碼,然後再繼續修復。
這裏是我的模型的相關代碼:
public class UserRegistration
{
public int Id { get; set; }
public virtual ICollection<UserRegistrationSession> Sessions { get; set; }
}
public class UserRegistrationSession
{
public int Id { get; set; }
public virtual UserRegistration UserRegistration { get; set; }
}
凡遷移得到它是從信息?我刪除從遷移文件Sessions_Id任何參考,並徹底消除了關係,然後刪除數據庫,並重新運行遷移。然後它告訴我,我的模型與我的遷移不同步,並且當我運行添加遷移時,我從任何地方獲得東西。 DropIndex(「dbo.UserRegistrations」,new [] {「Sessions_Id」}); WTF? 該指數不存在,EF! –