标识自动增量未应用于列

Posted

技术标签:

【中文标题】标识自动增量未应用于列【英文标题】: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 好的,谢谢! 【参考方案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; 

这解决了我的问题

【讨论】:

以上是关于标识自动增量未应用于列的主要内容,如果未能解决你的问题,请参考以下文章

Synapse SQL:将临时表合并到主表和自动增量标识

Firestore 和自动增量 ID

未找到自动增量插件 nextCount

自动增量未写入对象

在不触摸自动增量 ID 字段的情况下选择

Jooq 强制类型未应用于列