2017-07-25 88 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