【发布时间】:2016-11-09 17:30:24
【问题描述】:
我使用的是 EF 代码优先。我需要更改生产数据库中一张表的主键数据类型。
public class Course
{
[Key]
public Guid Id {get; set;} //This needs to be changed to int
public string Name {get;set;}
public virtual ICollection<Group> Groups {get;set;}
}
public class Group
{
[Key]
public Guid Id {get; set;}
public string Name {get;set;}
public virtual ICollection<Course> Courses{get;set;}
}
由于上述是多对多关系,EF 自动创建了一个连接表 GroupCourses,PK 和 FK 为 Group_Id 和 Course_Id。到目前为止还不错。
现在我需要将Course 实体中的主键从Guid 更改为int。
我将数据类型从 Guid 更改为 int 并成功创建了新的迁移。但是当我尝试运行命令update-database 时,我遇到了错误。
操作数类型冲突:uniqueidentifier 与查询中的 int 不兼容
我不确定如何解决上述错误。
另外,我认为在不丢失数据的情况下更改主键字段的数据类型是不可能的(当然,我们可以手动从备份中复制)。我希望我错了。
有人可以告诉我有没有更好的方法可以在不丢失数据的情况下实现这一点?
注意:我浏览过其他与 SO 相关的帖子和其他互联网论坛,但没有运气。
【问题讨论】:
-
您能否进行迁移以使用
Seed()方法将旧课程表中的所有数据插入到 Temp 中的 CourseTemp?然后您可以进行另一次迁移以删除原始课程并重命名 CourseTemp 类/表?
标签: c# asp.net-mvc ef-code-first entity-framework-6 entity-framework-migrations