.NET5迁移至.NET8后EF Core警告NavigationBaseIncludeIgnored解决咨询
警告原因
EF Core 6及以上版本的自动修复机制会自动填充实体间的反向导航属性。你查询的是Documents并已Include了Tasks,那么每个TaskEntity的Document导航属性会被EF自动关联到当前查询的Document实体,无需手动Include,重复Include会被EF忽略并触发该警告。
改写后的查询代码
var document = await _context.Documents // 加载Tasks及关联层级,无需Include Task.Document(自动修复填充) .Include(doc => doc.Tasks) .ThenInclude(task => task.Workplace) .ThenInclude(workplace => workplace.WorkplaceUsers) .ThenInclude(wpUser => wpUser.User) // 加载当前Document的RouteStepValues及关联 .Include(doc => doc.RouteStepValues) .ThenInclude(rsv => rsv.RouteStepValueProperties) .Include(doc => doc.RouteStepValues) .ThenInclude(rsv => rsv.Element) .ThenInclude(element => element.ElementProperties) .Include(doc => doc.RouteStepValues) .ThenInclude(rsv => rsv.Document) .ThenInclude(doc => doc.DocumentType) .ThenInclude(dt => dt.Components) .ThenInclude(comp => comp.ComponentProperties) .Include(doc => doc.RouteStepValues) .ThenInclude(rsv => rsv.Document) .ThenInclude(doc => doc.DocumentType) .ThenInclude(dt => dt.Components) .ThenInclude(comp => comp.ComponentElements) .ThenInclude(ce => ce.Element) .ThenInclude(element => element.ElementProperties) .Include(doc => doc.RouteStepValues) .ThenInclude(rsv => rsv.Document) .ThenInclude(doc => doc.DocumentAttributes) .Include(doc => doc.RouteStepValues) .ThenInclude(rsv => rsv.Document) .ThenInclude(doc => doc.CardFieldValues) .ThenInclude(cfv => cfv.Element) .ThenInclude(element => element.ElementPropertyDependencies) .ThenInclude(dep => dep.ElementProperty) .Include(doc => doc.RouteStepValues) .ThenInclude(rsv => rsv.Document) .ThenInclude(doc => doc.ParentDocument) .ThenInclude(parentDoc => parentDoc.CardFieldValues) .ThenInclude(cfv => cfv.Element) .ThenInclude(element => element.ElementPropertyDependencies) .ThenInclude(dep => dep.ElementProperty) // 直接加载当前Document的父文档,替代原通过Task.Document的冗余路径 .Include(doc => doc.ParentDocument) .AsSplitQuery() .FirstOrDefaultAsync(doc => doc.Id == request.DocumentId);
关键改动说明
- 移除冗余Include:删除所有
.Include(t => t.Tasks).ThenInclude(t => t.Document)层级,依赖EF自动修复机制填充反向导航。 - 调整父文档加载路径:原通过
Task.Document.ParentDocument加载父文档,改为直接Includedoc.ParentDocument,避免冗余关联链。 - 保留有效关联链:所有从
RouteStepValues.Document出发的深层关联保留,确保DocumentType、DocumentAttributes等属性被正确加载。
内容的提问来源于stack exchange,提问作者Web FR
相关产品推荐
相关产品推荐

