You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EF Core向PostgreSQL插入1:N关联数据时触发主键重复约束异常

EF Core 插入一对多关联记录时触发PostgreSQL主键重复约束错误

我使用EF Core向PostgreSQL数据库插入带有一对多关联的记录:单独向Users表插入单条记录完全正常,但当引入User与User_Governments的一对多关联后,就会抛出错误:duplicate key value violates unique constraint "pk_user_governments"。

已尝试的操作

  • 执行以下PostgreSQL查询语句:

    SELECT MAX(user_governments_id) FROM user_governments;
    SELECT nextval('users_gov_user_id_seq');
    每次执行这两个语句,返回的值都会递增,但问题仍未解决。

  • 参考相关内容执行重置序列的命令:
    SELECT SETVAL((SELECT PG_GET_SERIAL_SEQUENCE('user_governments', 'user_government_id')), (SELECT (MAX("user_government_id") + 1) FROM "user_governments"), FALSE);
    
    执行后报错:

    ERROR: relation "user_governments" does not exist

插入代码

User user = new();
user.Organisation = organisation;
user.Name = userName;
user.Email = email;
user.IsSafetyDashboardUser = isSafetyFlag;

if (isSafetyFlag)
{
    List<UserGovernment> userGovernments = new List<UserGovernment>();

    foreach (var govId in lgas)
    {
        userGovernments.Add(new UserGovernment()
        {
            LocalGovId = govId,
            StateId = 7                            
        });
        
    }

    user.UserGovernments = userGovernments;

}

_context.Users.Add(user);

int rows_affected = _context.SaveChanges();

User_Governments表结构

CREATE TABLE IF NOT EXISTS user_governments
(
    user_government_id integer NOT NULL GENERATED BY DEFAULT AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 2147483647 CACHE 1 ),
    user_id integer NOT NULL,
    state_id integer NOT NULL,
    local_gov_id integer NOT NULL,
    CONSTRAINT pk_user_governments PRIMARY KEY (user_government_id),
    CONSTRAINT fk_user_governments_local_govs_local_gov_id FOREIGN KEY (local_gov_id)
        REFERENCES local_govs (local_gov_id) MATCH SIMPLE
        ON UPDATE NO ACTION
        ON DELETE CASCADE,
    CONSTRAINT fk_user_governments_states_state_id FOREIGN KEY (state_id)
        REFERENCES states (state_id) MATCH SIMPLE
        ON UPDATE NO ACTION
        ON DELETE CASCADE,
    CONSTRAINT fk_user_governments_users_user_id FOREIGN KEY (user_id)
        REFERENCES users (user_id) MATCH SIMPLE
        ON UPDATE NO ACTION
        ON DELETE CASCADE
)
WITH (
    OIDS = FALSE
)
TABLESPACE pg_default;

内容的提问来源于stack exchange,提问作者Samra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 19:48:25