Entity Framework add-migration为何生成不存在的类变量名?
解决EF Core迁移生成错误外键属性的问题
排查与修复步骤:
检查模型快照文件
找到项目Migrations文件夹下的[你的DbContext名称]ModelSnapshot.cs文件,搜索MSProcessMasterApprover_CustomerId,确认它的定义是否异常。如果快照里把这个属性的类型错误设为MSApprover,手动修正为对应MSApprover主键的类型(比如int或Guid),保存后再重新生成迁移。核对实体关系配置
- 先确认
MSApprover类的主键类型,比如是否是public int Id { get; set; }这类定义。 - 打开
DbContext的OnModelCreating方法,检查是否有针对MSProcessMasterApprover_Customer的错误Fluent API配置。比如是否误写了类似以下的代码:
如果modelBuilder.Entity<你的实体类>() .HasOne(e => e.MSProcessMasterApprover_Customer) .WithMany() .HasForeignKey(e => e.MSProcessMasterApprover_CustomerId);MSProcessMasterApprover_CustomerId在实体里被错误定义为MSApprover类型,就会出现这个问题。建议直接在实体类中显式添加正确的外键属性:// 在包含MSProcessMasterApprover_Customer的实体类中添加 public int MSProcessMasterApprover_CustomerId { get; set; } // 类型和MSApprover的主键一致 public MSApprover MSProcessMasterApprover_Customer { get; set; }
- 先确认
排查其他关联实体
全局搜索解决方案里所有引用MSProcessMasterApprover_Customer或MSApprover的代码,看看是否有其他实体类错误定义了反向关系,导致EF Core模型推断出错。彻底重置迁移(极端情况)
- 手动删除
Migrations文件夹下的所有文件,包括快照文件。 - 清空数据库中的
__EFMigrationsHistory表(开发环境可以直接删库重建)。 - 重新运行
add-migration InitialCreate生成全新的迁移文件。
- 手动删除
核对EF Core版本
确保项目中所有EF Core相关的NuGet包版本一致,版本不兼容也可能导致模型推断异常,统一升级到同一稳定版本再试。
内容的提问来源于stack exchange,提问作者Jens Chr. I. Thomsen
相关产品推荐
相关产品推荐

