EF Core执行SaveChangesAsync()时列名追加1报无效列名错误怎么解决?
EF Core 调用SaveChangesAsync()报「无效列名EmployeeID1」错误解决方案
错误根源
该错误完全由Employee类中重复定义的ID属性导致:
EF Core默认会将命名符合类名+Id规则的属性识别为实体主键,同时关联Orders子表时会用主键匹配外键。你当前的类中同时存在EmployeeId(d小写)和标注了[Key]的EmployeeID(D大写)两个ID属性,EF Core无法识别唯一主键,为了避免字段冲突就自动给未映射的ID追加1后缀,最终生成了数据库中不存在的EmployeeID1列名。
注释SaveChangesAsync()不会报错是因为EF Core只有在执行持久化操作时才会生成SQL语句发往数据库,仅添加实体到上下文跟踪集合不会触发SQL编译和执行。
修复步骤
- 第一步:删除重复的ID属性
直接删除Employee类中多余的public int EmployeeId { get; set; }行,仅保留标注了主键特性的EmployeeID属性即可。 - 第二步:修正主键访问修饰符(如果你的EmployeeID是自增主键)
把internal set改为public set,避免EF Core赋值主键时出现访问权限问题:[Key] public int EmployeeID { get; set; } - 第三步:同步模型配置(可选,适配现有数据库)
如果修改后仍报错,检查SportsPlayContext中OnModelCreating方法里的Employee实体配置,确保主键映射的列名和数据库实际的EmployeeID完全匹配,不需要额外修改数据库结构。
内容的提问来源于stack exchange,提问作者codethisguy9
相关产品推荐
相关产品推荐

