我创建了一个具有各种值的模型,但愚蠢地使用了 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/