当我尝试对数据库进行查询时,出现上述错误。这在 .NET 5 中运行良好,但是当我在 .NET 6 中创建一个新项目并使用完全相同的查询时,我收到错误 - 我可能做错了什么?
这是我的代码:
public async Task<IQueryable<Employee>> FindAllEmployees()
{
try
{
IQueryable<Employee> employeeModel = await _employee.Context.employee
.AsNoTracking()
.Include(a => a.Policies).ThenInclude(a => a.Product).ThenInclude(a => a.Underwriter)
.Include(a => a.PrincipalMember); //error appears here
return employeeModel;
}
catch (Exception ex)
{
_logService.LogError(ex.Message);
throw;
}
}
我尝试添加
ToListAsync()
并且它对编译器错误进行了排序,但随后我在运行时收到错误
无法将“Collections.Generic.List
2”类型的对象转换为“Generic.ICollection”类型1[Microsoft.EntityFrameworkCore.Query.IIncludableQueryable
IQueryable<Employee> employeeModel =
(IQueryable<Employee>)await _employeeContext.Employee.AsNoTracking()
.Include(a => a.Policies).ThenInclude(a => a.Product).ThenInclude(a => a.Underwriter)
.Include(a => a.PrincipalMember).ToListAsync();
实现后你应该返回
IEnumerable
。 IQueryable
不再需要,可能会影响性能。
public async Task<IEnumerable<Employee>> FindAllEmployees()
{
try
{
var employeeModel = await _employee.Context.employee
.AsNoTracking()
.Include(a => a.Policies).ThenInclude(a => a.Product).ThenInclude(a => a.Underwriter)
.Include(a => a.PrincipalMember)
.ToListAsync();
return employeeModel;
}
catch (Exception ex)
{
_logService.LogError(ex.Message);
throw;
}
}
但是如果你还需要
IQueryable
不破坏界面,你可以打电话
return employeeModel.AsQueryable();
但请注意,这个
IQueryable
将从 IEnumerable
创建,并将在内存中与物化对象一起工作。