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

ASP.NET Core 7.0向DbContext填充种子数据遇主键冲突错误求助

ASP.NET Core 7.0 种子数据重复主键问题解决

错误原因

你提供的SeedData方法中,重复添加了主键Id=3的RoleTable实体:

modelBuilder.Entity<RoleTable>().HasData(new RoleTable { Id = 3, RoleName = nameof(UserRole.Customer) });
modelBuilder.Entity<RoleTable>().HasData(new RoleTable { Id = 3, RoleName = nameof(UserRole.Warranty) });

EF Core要求种子数据的主键必须唯一,重复的主键值触发了该错误。

修复方案

将重复的主键值修改为唯一值,同时建议一次性传入所有种子实体(代码更简洁,减少出错概率):

private void SeedData(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<RoleTable>().HasData(
        new RoleTable { Id = 1, RoleName = nameof(UserRole.Admin) },
        new RoleTable { Id = 2, RoleName = nameof(UserRole.Operator) },
        new RoleTable { Id = 3, RoleName = nameof(UserRole.Customer) },
        new RoleTable { Id = 4, RoleName = nameof(UserRole.Warranty) }
    );
}

额外注意事项

  • 种子数据的主键必须全局唯一,同一实体类型下不能出现重复值
  • 若实体使用自动生成主键(如[Key]+[DatabaseGenerated(DatabaseGeneratedOption.Identity)]),种子数据仍需显式指定主键值,避免EF Core自动生成时出现冲突
  • 确保在DbContext的OnModelCreating方法中调用SeedData,之后执行迁移命令(Add-Migration + Update-Database)使种子数据生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 11:21:07