2016-07-05 5 views
3

Когда я EntityFramework 7.0.0-rc1 я написал что-то вроде этого:Entity Framework Ядро 1.0.0: жадная загрузка с Где-п

context.MyEntity 
.Include(e=>e.MySubEntities) 
.Where(e=>e.MySubEntities.Contains(value)) 
.Where(e=>e.Status==1) 
.ToList(); 

В EFCore 1.0.0 тот же код выдает исключение. Я полагаю, что Include в момент первых запусков Where не загрузил данные. Итак, теперь мне нужно сначала создать экземпляр моей коллекции со всеми связанными данными, затем запросить ее. Предыдущий подход, казалось, был оптимизирован, поскольку был единственный запрос к базе данных (не так ли?). Как я могу сделать то же самое сейчас?

P.S. Я использую Npgsql.EntityFrameworkCore.PostgreSQL 1.0.0

+0

Вы используете EFCorce 1 RTM? – Nils

+0

@ Нильс Да. «Microsoft.EntityFrameworkCore»: «1.0.0», «Microsoft.EntityFrameworkCore.Tools»: { «версия»: «1.0.0-preview2-final», «type»: «build» }, ' – Slip

+0

Ну, это должно сработать - согласно официальной документации: https://docs.efproject.net/en/latest/querying/related-data.html – Nils

ответ

2

Вы не можете использовать Содержится в EF Ядра так, потому что значение не может не быть переведены в дерево выражения:

Просто использовать его так:

var tmp = myConext.MyEntity 
      .Include(e=>e.MySubEntities) 
      .Where(x => x.MySubEntities.Select(id=>id.MySubEntitiesId).Contains(value.MySubEntitiesId)) 
      .Where(e=>e.Status==1) 
      .ToList(); 
Смежные вопросы