Код: Выделить всё
var query = context.Top
//.Include(t => t.Sub) Doesn't seem to do anything
.Select(t => new {
prop1 = t.C1,
prop2 = t.Sub.Select(s => new {
prop21 = s.C3 //C3 is a column in the table 'Sub'
})
//.ToArray() results in N + 1 queries
});
var res = query.ToArray();
Однако при использовании EntityFrameworkCore (NuGet v1.1.0) подколлекция еще не загружена и имеет тип:
Код: Выделить всё
System.Linq.Enumerable.WhereSelectEnumerableIterator.
Первое указание .Include(t => t.Sub), похоже, ничего не меняет. Использование анонимных типов также не является проблемой: замена новых блоков { ... на новые MyPocoClass { ... ничего не меняет.
Мой вопрос: Есть ли способ добиться поведения, аналогичного EF6, где все данные загружаются немедленно?
Примечание: я понимаю: что в этом примере проблему можно решить, создав анонимные объекты в памяти после выполнения запроса следующим образом:
Код: Выделить всё
var query2 = context.Top
.Include(t => t.Sub)
.ToArray()
.Select(t => new //... select what is needed, fill anonymous types
Обновление: Протестировано с новым EF Core 2.0, проблема все еще присутствует. (21-08-2017)
Проблема отслеживается в aspnet/EntityFrameworkCore Репозиторий GitHub: Проблема 4007
Обновление: Год спустя эта проблема была исправлена в версии 2.1.0-preview1-final. (01.03.2018)
Обновление: Выпущена версия EF 2.1 с исправлением. см. мой ответ ниже. (31 мая 2018 г.)