2017-06-14 68 views
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約束線?

回答

2

看起來你可能會遇到問題#7535。這將在2.0.0版中修復。

+0

是的,看起來沒錯。謝謝。 –