首页 > 解决方案 > EF Core 5 现在如何在 .Include 中硬转换属性?

问题描述

在升级到 EF Core 5 之前,我们可以进行c.Progresses如下所示的转换。有人知道我现在如何正确使用它吗?

var case = caseRepository
    .Many(c => c.Id == caseId)
    .Include(c => c.Progresses as Progress) // this breaks
        .ThenInclude(p => ProgressType)
    .SingleOrDefault();

错误:

System.InvalidOperationException:'表达式'Convert(c.Progresses,Progress)'在'Include'操作中无效,因为它不代表属性访问:'t => t.MyProperty'。要定位在派生类型上声明的导航,请使用强制转换 ('t => ((Derived)t).MyProperty') 或 'as' 运算符 ('t => (t as Derived).MyProperty')。集合导航访问可以通过组合 Where、OrderBy(Descending)、ThenBy(Descending)、Skip 或 Take 操作进行过滤。有关包含相关数据的详细信息,请参阅http://go.microsoft.com/fwlink/?LinkID=746393

编辑:这修复了它:

var case = caseRepository
    .Many(c => c.Id == caseId)
    .Include(c => c.Progresses)
        .ThenInclude(p => (p as Progress).ProgressType)
    .SingleOrDefault();

为什么升级到 EF Core 5 后需要进行此更改?

标签: c#entity-framework-core

解决方案


推荐阅读