【问题标题】:change the primary key datatype using code first approach使用代码优先方法更改主键数据类型
【发布时间】:2018-08-29 16:22:23
【问题描述】:

如何在 .NET 中使用代码优先方法将 Guid 数据类型更改为主键的 int 数据类型而不丢失数据?

update-database 命令触发后抛出错误

标识列“Id”的数据类型必须为 int、bigint、smallint、tinyint 或小数位数或小数位数为 0 的数字,并且限制为不可为空。

【问题讨论】:

  • 最好在您的问题中插入一些代码和完整的错误消息。
  • 您好,欢迎来到 StackOverflow。您必须提供Minimal, Complete, and Verifiable Example 以便我们为您提供帮助。请清楚地说明您的问题(现在很难理解),并向我们展示您的代码。

标签: c#


【解决方案1】:

GUID 无法在不丢失数据的情况下转换为 INT,但您可以添加一个具有不同名称的 Id 列。

可能性一:

添加一个您打算作为主键的属性,然后添加迁移。

[Key, Required]
public int Id { get; set; }

可能性2:

确保数据库与模型完全同步,并且您对两者都有备份。将您的 Id 列添加到表中并将其设置为主键。

ALTER TABLE dbo.YourTable ADD Id INT IDENTITY
ALTER TABLE dbo.YourTable ADD CONSTRAINT PK_YourTable PRIMARY KEY(Id)

更新您的模型以匹配数据库中的更改。

[Key, Required]
public int Id { get; set; }

从数据库中删除 _MigrationHistory 表并从您的项目中删除 Migrations 文件夹。然后启用迁移。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-05
    • 1970-01-01
    • 1970-01-01
    • 2018-02-26
    • 2015-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多