使用MySQL.Data.EntityFramework 8.0.20生成查询时遇空指针异常
MySQL.Data.EntityFramework 8.0.20 多Include关联时出现空指针异常问题
问题复现场景
使用MySQL.Data.EntityFramework 8.0.20时,执行query = query.Include("Table1").Include("Table2")查询正常,但添加第三个0..n关联的Table3后,执行query = query.Include("Table1").Include("Table2").Include("Table3")会抛出空指针异常。异常触发于SelectStatement.cs中,MySQL生成类似1 AS C12的人工列时,该列未设置ColumnName属性,导致.ToUpper()调用失败。另外,移除Table2仅保留Include("Table1").Include("Table3")时查询又能正常运行。
解决方案
- 优先升级版本:这是该版本的已知bug,官方在8.0.21及后续版本中修复了自动生成列未正确初始化ColumnName的问题,直接升级到更高版本的MySQL.Data.EntityFramework即可解决。
- 改用强类型Include:如果暂时无法升级,替换字符串重载的Include为强类型表达式,比如
query.Include(x => x.Table1).Include(x => x.Table2).Include(x => x.Table3),强类型的表达式解析逻辑和字符串重载不同,大概率能避开这个bug。 - 拆分查询(临时 workaround):把多关联查询拆分为两次独立查询,先加载主实体+Table1+Table2的数据,再通过主实体的ID单独查询Table3的数据,最后在内存中完成关联,避免一次查询触发bug。
内容的提问来源于stack exchange,提问作者dognose
相关产品推荐
相关产品推荐

