1
使用實體框架的核心代碼優先發展:EF核心遷移錯誤「無法刪除約束」,這是以前的遷移中刪除
在過去的遷移我跑了,我切換從(簡體)
的關係public class SiteUser
{
public int Id {get; set;}
public int EmployeeId { get; set; }
[InverseProperty("SiteUser")]
public virtual Employee Employee { get; set; }
}
public class Employee
{
public int Id {get; set;}
[InverseProperty("Employee")]
public virtual SiteUser SiteUser { get; set; }
}
(這意味着SiteUser是僱員的子集,從相對的預期行爲) 到
public class SiteUser
{
public int Id { get; set; }
}
public class Employee
{
public int Id {get; set;}
public int SiteUserId { get; set; }
[ForeignKey("SiteUserId")]
[InverseProperty("Employee")]
public virtual SiteUser SiteUser { get; set; }
}
這當然得到我遷移,其中包括外鍵約束:
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_SiteUser_Employee_EmployeeId",
table: "SiteUser");
//etc
}
我運行該遷移並從中更新數據庫,它工作正常。表和外鍵約束已正確更新爲新模型。不過,我想現在要做一個新的遷移,當我嘗試運行更新的數據庫,我得到
System.Data.SqlClient.SqlException (0x80131904): 'FK_SiteUser_Employee_EmployeeId' is not a constraint.
Could not drop constraint. See previous errors.
我的反應是,好了,廢話EF,你掉在過去的遷移是約束;你爲什麼試圖再次放棄它?
新的遷移C#文件沒有關於刪除該約束的任何內容,那爲什麼要嘗試?我怎麼能告訴EF停止崩潰在這個DROP約束線?
是的,看起來沒錯。謝謝。 –