had*_*w64 6 entity-framework ef-migrations
我创建了一个具有各种值的模型但是愚蠢地使用了GUID我的密钥,我正在尝试将其更改为a Int但是当我这样做时会出现错误.
我已经运行了启用迁移命令:
Enable-Migrations -Force -ContextTypeName project.Models.MyContext
Run Code Online (Sandbox Code Playgroud)
这会创建我期望的迁移,但是当我运行时:
Update-Database -Force
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
操作数类型冲突:uniqueidentifier与int不兼容
我不关心数据库中当前包含的数据,因为它刚刚使用SQL Server Express数据库,但我更愿意找到一种方法来迁移它,而不是只需要完全丢弃数据库,最好的是什么这样做的方法?
我已经有了
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<MyContext>());
Run Code Online (Sandbox Code Playgroud)
在Global.asax.
Ric*_*ard 13
我希望生成的迁移使用AlterColumn来尝试将字段的类型从guid更改为int.这是不可能的,因此您需要自己修改生成的迁移:
假设你的表是dbo.People并且密钥被称为Id,你现在可能有这个:
DropPrimaryKey("dbo.People");
AlterColumn("dbo.People", "Id", c => c.Int(nullable: false, identity: true));
AddPrimaryKey("dbo.People", "Id");
Run Code Online (Sandbox Code Playgroud)
将其更改为:
DropPrimaryKey("dbo.People");
DropColumn("dbo.People", "Id");
AddColumn("dbo.People", "Id", c => c.Int(nullable: false, identity: true));
AddPrimaryKey("dbo.People", "Id");
Run Code Online (Sandbox Code Playgroud)
请注意,如果您在其他地方引用了此密钥,则如果您有任何数据存在,则此技术将不起作用,因为密钥都已重新生成.
EF Core 生成的迁移更新:
dotnet : System.Data.SqlClient.SqlException: Operand type clash: int is incompatible with uniqueidentifier
Run Code Online (Sandbox Code Playgroud)
改变
migrationBuilder.AlterColumn<Guid>(
name: "VATID",
schema: "catalogue",
table: "Products",
nullable: false,
oldClrType: typeof(int));
Run Code Online (Sandbox Code Playgroud)
进入
migrationBuilder.DropColumn(
name: "VATID",
schema: "catalogue",
table: "Products");
migrationBuilder.AddColumn<Guid>(
name: "VATID",
schema: "catalogue",
table: "Products",
nullable: false);
Run Code Online (Sandbox Code Playgroud)
当然,这会破坏特定列的数据。但它们显然不能转换为 GUID。
| 归档时间: |
|
| 查看次数: |
2866 次 |
| 最近记录: |