【发布时间】:2021-04-20 10:33:56
【问题描述】:
我在 dataContext 的 OnModelCreating 方法中使用以下代码:
modelBuilder.Entity<EnumValue>().HasData(
new EnumValue
{
EnumValueId = 1,
EnumValueName ="test"
});
但我不想手动设置 EnumValueId = 1,我想自动设置。 这是我的 EnumValue 模型:
[Key]
[Required]
public int EnumValueId { get; set; }
[Required]
public string EnumValueName { get; set; }
如何让Id属性自动递增?
【问题讨论】:
-
你自己试过了吗(没有手动设置id)?按照惯例,以
Id结尾且类型为int的键属性默认应为自动递增(无需额外配置)。除非您有一些不是从模型创建的现有数据库(不使用代码优先方法)。如果是这种情况,则需要手动修改数据库表。 -
@KingKing 我绑了,我得到了错误,说 Id 不能是非零值。我还阅读了文档,如果不想编写自定义迁移,您应该声明 Id
-
这是一种奇怪的行为,可能会在不同版本的 EFCore 中发生变化。无论如何,您可以尝试找到一些方法将密钥属性显式配置为身份,对于
SQL Server,我们有类似modelBuilder.Entity<EnumValue>().Property(e => e.EnumValueId).UseSqlServerIdentityColumn()- 对于postgresql,它应该有一些类似的扩展方法(由相应的EFCore提供程序实现PostgreSQL)。 -
请注意,在对配置或模型进行任何更新后,您需要通过自动生成的迁移运行数据库更新。否则你必须手动更新数据库(这可能容易出错,导致数据库和模型不匹配)。
标签: postgresql asp.net-core migration seeding