entity-framework - Entity Framework 更改 key 类型

标签 entity-framework entity-framework-migrations

我创建了一个具有各种值的模型,但愚蠢地使用了 GUID对于我的 key ,我目前正在尝试将其更改为 Int但是当我这样做时出现错误。

我已经运行了启用迁移命令:

Enable-Migrations -Force -ContextTypeName project.Models.MyContext

这会创建我期望的迁移,但是当我运行时:
Update-Database -Force

我得到的错误是:

Operand type clash: uniqueidentifier is incompatible with int



我不关心当前包含在数据库中的数据,因为它现在只是使用 SQL Server Express 数据库,但我更愿意找到一种方法来迁移它而不是完全删除数据库,什么是最好的如何做到这一点?

我已经有了
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<MyContext>());

Global.asax .

最佳答案

我希望生成的迁移使用 AlterColumn 尝试将字段的类型从 guid 更改为 int。这是不可能的,因此您需要自己修改生成的迁移:

假设您的表是 dbo.People 并且键名为 Id,您现在可能有这个:

DropPrimaryKey("dbo.People");
AlterColumn("dbo.People", "Id", c => c.Int(nullable: false, identity: true));
AddPrimaryKey("dbo.People", "Id");

将其更改为:
DropPrimaryKey("dbo.People");
DropColumn("dbo.People", "Id");
AddColumn("dbo.People", "Id", c => c.Int(nullable: false, identity: true));
AddPrimaryKey("dbo.People", "Id");

请注意,如果您在其他地方引用了此 key ,那么如果您有任何数据,此技术将不起作用,因为所有 key 都在重新生成。

关于entity-framework - Entity Framework 更改 key 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36599296/

相关文章:

c# - E.F 上下文 - 存储过程和查询

c# - Entity Framework 如何管理映射查询结果到匿名类型?

带有 Entity Framework 4 的 ASP.NET MVC2 - 存储库中的 AsEnumerable() 或 ToList()?

c# - EntityFramework EF 不让我重新搭建脚手架

entity-framework - EF6,代码优先,启用迁移, "Unable to load the specified metadata resource"

c# - 带有 Entity Framework 4.0 的基本/简单数据访问对象 (DAO)

sql - ORM:我为什么要使用它?

entity-framework - 我可以在 EF 6 中试运行更新数据库吗?

c# - 在迁移期间将标识设置为先前创建的列

entity-framework-4 - 使用 Entity Framework 迁移播种和分支项目