【发布时间】:2021-09-07 01:57:55
【问题描述】:
我在尝试包含派生类型的导航属性时抛出以下异常:
System.InvalidOperationException: Invalid include.
at Microsoft.EntityFrameworkCore.Query.Internal.NavigationExpandingExpressionVisitor.PopulateIncludeTree(IncludeTreeNode includeTreeNode, Expression expression)
at Microsoft.EntityFrameworkCore.Query.Internal.NavigationExpandingExpressionVisitor.ProcessInclude(NavigationExpansionExpression source, Expression expression, Boolean thenInclude)
at Microsoft.EntityFrameworkCore.Query.Internal.NavigationExpandingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression)
...
使用以下简化的类结构:
public abstract class BaseJob
{
public int Id { get; set; }
}
public abstract class WorkerJob : BaseJob
{
public Person Person { get; set; }
}
public class PaintingJob : WorkerJob
{
public string Color { get; set; }
}
public class Person {
public int Id { get; set; }
public string Name { get; set; }
}
当通过DbContext 查询时,记录在here:
// Throws InvalidOperationException
var jobs = await _context.BaseJobs
.Include(job => (job as WorkerJob).Person) // WorkerJob is abstract
.ToListAsync();
这必须与抽象类中存在的导航属性相关,因为要按预期将查询调整为以下工作:
// Works as intended
var jobs = await _context.BaseJobs
.Include(job => (job as PaintingJob).Person) // PaintingJob is concrete
.ToListAsync();
但是,我有许多具体派生类,我不想每次添加新的具体类时都必须更改查询。这可能是 EF Core 的错误,还是我做错了什么?
【问题讨论】:
标签: c# entity-framework entity-framework-core ef-core-3.1