依赖实体导致的Unknown column

场景:

在进行表结构调整后,出现Unknown column 的问题,原表结构如下:

  • Course   课程计划表
  • CourseStudent   课程学员表 ,上级是Course

新表结构

  • Course   课程表
  • CourseLearnPlan  课程计划表
  • CourseLearnPlanStudent   课程计划学员表,上级是CourseLearnPlan

改造完后,调用查询CourseLearnPlanStudent  ,  一直提示'CourseId' Unknown column

排查确认:

  • CourseLearnPlanStudent  表中没有CourseId
  • CourseLearnPlanStudent 增加一个CourseId,不会导致编译出错
  • CourseLearnPlanStudent 增加一个不存在的列字段,如AbcId,日志中看到的查询sql语句,除AbcId外,仍然存在CourseId
  • 重新编译以及删掉obj、bin后,问题依旧
  • 本项目中,不存在CourseLearnPlanStudent 的 partial class
  • 引用项目中,也不存在CourseLearnPlanStudent

最后问题所在

由于在进行改造的过程中,是先进行表名改造,当时将CourseStudent先改为CourseLearnPlanStudent,

然后在Course中,存在下面的依赖属性,实际上没有删除

[Table("Course")]
public partial class Course : EntityBase
{
     ....
     public List<CourseLearnPlanStudent> CourseLearnPlanStudents { get; set; }
}

但在最终的CourseLearnPlanStudent并没有Course的主体依赖,

即CourseLearnPlanStudent并没有CourseId,

但是因为Course中存在CourseLearnPlanStudents,导致EF Core 认为CourseLearnPlanStudent 应该有CourseId,

所以在查询的时候自动带上了CourseId

这也就是排查的过程中,编译不出错,但是运行出错的原因,将Course中的依赖属性CourseLearnPlanStudents移除即可

Xiang,东莞,2021年4月4日遇到,4月5日早上解决。