EF Core中使用ThenInclude加载孙子实体失败问题求助
EF Core Include+ThenInclude无法加载孙表Buildings的常见原因
以下是几种可能导致该问题的原因,你可以逐一排查:
模型关联配置有误
检查Scaffold生成的实体类:- 确认
Parcels类中是否存在public ICollection<Buildings> Buildings { get; set; }这样的集合导航属性; - 确认
Buildings类中是否有对应外键(比如ParcelId)以及public Parcels Parcel { get; set; }的引用导航属性; - 查看DbContext的
OnModelCreating方法,确认EF Core是否正确配置了两者的关联关系,比如modelBuilder.Entity<Parcels>().HasMany(p => p.Buildings).WithOne(b => b.Parcel).HasForeignKey(b => b.ParcelId);这类配置是否存在。
- 确认
数据库中无关联数据
直接查询数据库,检查当前加载的Parcels记录,是否存在对应的Buildings记录(即Buildings表中有没有外键值匹配这些Parcels主键的行)。如果数据库本身就没有关联数据,EF Core自然返回空的Buildings集合。查询代码写法错误
确保你的查询链式调用正确,示例正确写法如下:var targetAddress = _context.Addresses .Include(a => a.Parcels) .ThenInclude(p => p.Buildings) .FirstOrDefault(a => a.Id == 1);注意
ThenInclude必须紧跟在对应的Include之后,针对集合导航属性中的元素进行嵌套加载,不要断开链式结构。Scaffold生成模型时遗漏关联
如果数据库中Buildings表没有设置指向Parcels的外键约束,或者外键命名不符合EF Core的默认约定,Scaffold-DbContext工具可能无法自动识别关联关系,导致导航属性缺失。这种情况需要手动添加导航属性,并在DbContext中配置关联。
内容的提问来源于stack exchange,提问作者Fwd
相关产品推荐
相关产品推荐

