标识自动增量未应用于列
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;
这解决了我的问题
【讨论】:
以上是关于标识自动增量未应用于列的主要内容,如果未能解决你的问题,请参考以下文章