2017-07-25 65 views
0

我使用EF6和代碼優先遷移。我有兩個表使用ef6重命名錶和外鍵失敗使用EF6

public class Team { 

    public int Id { get; set; } 

    public string Name { get; set; } 
} 

public class TeamMember { 

    public int Id { get; set; } 

    public string Name { get; set; } 

    public Team Team { get; set; } 

    public int TeamId { get; set; } 

} 

我想TeamMember重命名爲TeamMemberDeprecated並添加新的名爲提交與TeamMember一定的差異,以表格的佈局。我創建一個新表的主要原因是數據。我想將所有數據保存在當前的TeamMember表中,因此我需要重命名它,並且我只想將需要的特定數據傳輸到新的TeamMember表。

當我添加遷移它看起來像這樣

RenameTable(name: "dbo.TeamMember", newName: "TeamMemberDeprecated"); 

什麼也不會做的是改變從FK_dbo.TeamMember_dbo.Team_TeamId到FK_dbo.TeamMemberDeprecated_dbo.Team_TeamId外鍵屬性的名稱。

由於外鍵FK_dbo.TeamMember_dbo.Team_TeamId已經存在於數據庫中,因此在創建新的TeamMember表時會出現問題。

我嘗試刪除外鍵並重命名它,但這並沒有做任何事情,當我運行遷移-verbose時,我明白了爲什麼它期望外鍵爲空。我想保留這些數據,但也許我的方法是錯誤的。

歡迎任何建議,謝謝。

回答

1

讓EF重命名錶,然後轉到SQL管理工作室並手動重命名外鍵。

回到EF,進行更改,運行遷移,讓EF創建新的外鍵

不要忘記備份您的數據庫

+0

非常感謝!這基本上是我對一個小的改變所做的事情,我在我的migrations腳本中包含了sql命令,這樣我就可以定位先前和後期的遷移,並確保所有命令都正確命名。謝謝你的幫助。 – Woot