【发布时间】:2019-10-25 15:00:04
【问题描述】:
我将 ASP.NET Core 2.2 MVC Web 应用程序迁移到 .NET Core 3.0。在某些情况下,包含不能正常工作。
var forms = _context.CheckInOutForm
.Include(x => x.Employee)
.AsQueryable();
// apply filter and sorting
forms = FilterForms(forms);
forms = SortForms(forms, sort);
// convert to viewmodel (database model as parameter in the constructer)
var items = forms.Select(x => new CheckInOutViewModel(x));
// load data for current page (with X.PagedList nuget package)
var pagedList = items.ToPagedList(pageNumber, pageSize);
由于某种原因,EF 为表 CheckInOutForm 构建了一个与 Employee 的内部连接的查询,但只从表 CheckInOutForm 中选择字段。我使用 SQL 分析器捕获了生成的查询并对其进行了分析。
此代码在迁移之前运行良好。我读过 EF Core 3.0 改变了连接表的行为。我仍然不明白为什么它会创建一个只有一个表的字段的选择。
items.ToPagedList 使用 OFFSET 和 FETCH NEXT 创建一个选择。同一个库可以在同一个应用程序的其他页面上工作。
有什么提示或想法吗?
【问题讨论】:
标签: c# entity-framework .net-core-3.0 asp.net-core-3.0