LINQ查询中加载Hearing子实体集合Digital_Content时Include报错的问题
问题根因
EF Core 的 Include 操作仅能识别实体类中声明的 符合规范的公共导航属性,当前代码存在两个关键偏差,直接对应你遇到的两个现象:
- 你在
Hearing类中将关联集合digital_Contents定义为公开字段,而非带get/set访问器的属性,EF Core 无法将其识别为合法的导航配置,因此直接抛出属性访问无效的异常。 - 由于该字段从未被EF Core识别为导航属性,不使用
Include时EF也不会自动为其填充关联的Digital_Content数据,最终返回的集合始终为空。
修正步骤
- 调整
Hearing类的关联集合定义,将公开字段替换为标准的公共导航属性,保留原有的空集合初始化逻辑:public class Hearing { [Key] public int Id { get; set; } public int HearingNumber { get; set; } public DateTime? End_Date { get; set; } // 从公开字段修改为带get/set的自动属性,保留集合初始化逻辑 public ICollection<Digital_Content> digital_Contents { get; set; } = new List<Digital_Content>(); } - 修改完成后,你原有查询逻辑无需调整即可正常运行:
var ListHearings = await _context.Hearing .Where(h => h.HearingNumber == 55) .Include(h => h.digital_Contents) .ToListAsync();
注意事项
- EF Core 对导航属性的识别要求:必须是公共成员、具备
get/set访问器,字段形式的关联集合无论访问修饰符是什么,都无法被EF Core的模型构建器识别为导航关系。 - 调整代码后可在EF Core的模型配置调试日志中,确认
Hearing和Digital_Content之间的一对多关系被正确识别,即可验证配置生效。
内容的提问来源于stack exchange,提问作者user9758771
相关产品推荐
相关产品推荐

