.NET Core添加EF Core迁移时报重复键错误的原因排查
实体继承配置冲突
基类<Tabel25Entity>与继承它的<TimeUnit>、<ExtraInfo>、<Usage>实体中,可能存在同名的string类型属性被EF Core重复注册。比如基类定义了某个string属性,子类又重新定义了同名属性但未正确排除映射(未加[NotMapped]特性,或未在OnModelCreating中用entity.Ignore(p => p.PropertyName)处理),导致模型构建时出现重复键。
排查:逐一检查子类与基类的属性,确认同名string属性的必要性,冗余属性直接添加排除配置。关联关系重复配置
<ExtraInfo>与<ExtraInfoCategory>之间的关联可能被重复定义——同时使用数据注解(如[ForeignKey]、[InverseProperty])和Fluent API配置同一关联,导致EF Core处理时生成重复键条目。
排查:清理重复的关联配置,同一关联仅保留一种配置方式(数据注解或Fluent API)。EF Core模型缓存残留
升级/降级EF Core包后,项目的模型缓存未彻底清理,旧缓存中的重复键残留导致迁移命令报错。
排查:删除项目的bin和obj目录,重启开发环境,重新执行Add-Migration命令。属性名称大小写冲突
部分数据库(如SQL Server)不区分列名大小写,若基类与子类存在大小写不同的同名string属性(如item和Item),会被EF Core识别为同一键,引发冲突。
排查:统一实体属性命名规范,或通过Fluent API显式配置不同的列名以区分。
内容的提问来源于stack exchange,提问作者Kamran Sadin

