【问题标题】:Identity auto increment not applied on column标识自动增量未应用于列
【发布时间】:2018-07-30 14:22:12
【问题描述】:

在数据库中创建表时进行数据库迁移后,身份自动增量未应用于“Id”列,而主键约束已应用于它。
以下是Model类代码。

public class Subscription
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public string Id { get; set; }
    public string domainName { get; set; }
    public string articleID { get; set; }
    public string tld { get; set; }
    public string customerID { get; set; }
    public string customerName { get; set; }
    public string price { get; set; }
    public string nextBillDate { get; set; }

}

以下是生成的表中的列。

有人可以帮助我如何在“Id”列中干净地应用自动增量。我希望它同时具有主键和自动增量。

编辑: 我将 Id 的类型更改为 int,但仍然没有应用自动增量。这是屏幕截图。

【问题讨论】:

  • 您有一个字符串属性作为唯一列。它不能是自动增量。使它成为一个整数。 public string Id { get; set; }
  • @MudassarSaleem 好的,谢谢!

标签: c# asp.net-mvc entity-framework asp.net-web-api entity-framework-6


【解决方案1】:

输入should be int 使其成为身份:

public int Id { get; set; }

【讨论】:

  • 我怎么这么笨!!谢谢!
  • 该列在更新时确实更改为 int 但仍然没有应用自动增量。
  • Id 在几乎所有情况下都应该是整数。 ;-) 祝你好运。
  • @VibheshKaul 您应该在再次更改后进行迁移,以便数据库中的 id 也更改为 int。
  • @VibheshKaul,如果您不关心数据,请删除您的数据库并再次运行迁移。当您更改某些属性的类型时,有时数据库会感到困惑。
【解决方案2】:

好的,在您将您的 ID 从 string 更改为 int 并且问题仍然存在后,我建议您应该删除您的数据库(如果您不关心数据)并从 Visual Studio 中删除您的迁移文件也是。从程序中删除迁移文件对您来说很重要,因为有时它无法识别所有更改。 或者,您可以在迁移文件中手动添加这行代码(可能不推荐,但如果没有帮助,这会有所帮助):

identity: true

所以,它应该看起来像这样:

CreateTable("dbo.Table",
            c => new
            {
                Id= c.Int(nullable: false, identity: true),
                ...
            })
            .PrimaryKey(t => t.Id)
            ...

【讨论】:

    【解决方案3】:

    如果你有这样的事情,

    private int _id = -1; 
    public int Id {get => _name; set => _name = value};
    

    删除它并尝试一下,

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; }
    

    这解决了我的问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-06
      • 2022-12-10
      • 2020-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多