Dotnet
依赖实体导致的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日早上解决。