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
相关产品推荐
相关产品推荐

