使用EFCore添加Ids不会影响PostgreSQL的自动增量值

cotxawn7  于 2023-06-22  发布在  PostgreSQL
关注(0)|答案(1)|浏览(118)

我正在使用PostgreSQL 15.0与EFCore的组合。由于我想通过单击设置一个演示环境,所以我在OnModelCreating(ModelBuilder modelBuilder)方法中设置了modelBuilder.UseIdentityByDefaultColumns();
我的演示数据设置如下所示:

context.DropDowns.AddRange(new List<DropDown>()
{
    new()
    {
        Id = 1,
        Value = "Value1",
    },
    new()
    {
        Id = 2,
        Value = "Value2",
    },
});

我在其他实体中使用ID设置FK值时手动设置ID。但是当我想添加一个新值(PostgreSQL应该自动生成ID)时,它会重用现有的PK,我会得到以下错误消息:
SQL错误[23505]:错误:重复的键值违反唯一约束“PK_DropDowns”详细信息:Key(“Id”)=(2)已存在。错误:重复的键值违反唯一约束“PK_DropDowns”详细信息:Key(“Id”)=(2)已存在。错误:重复的键值违反唯一约束“PK_DropDowns”详细信息:Key(“Id”)=(2)已存在。
每次我点击保存,它尝试使用的ID都会增加1,所以在这个例子中,在两次之后(我添加了两个固定ID的DropDown),它就可以正常工作了。如何处理混合使用自动生成的ID和手动设置的ID的问题?

2eafrhcq

2eafrhcq1#

我现在在演示数据中使用负值作为ID:

context.DropDowns.AddRange(new List<DropDown>()
{
    new()
    {
        Id = -1,
        Value = "Value1",
    },
    new()
    {
        Id = -2,
        Value = "Value2",
    },
});

相关问题