0

У меня есть метод службы, который возвращает список аннотаций пользователей:жадной загрузка вложенного свойства не работает в Entity Framework 6

public IEnumerable<UserSummary> GetUserSummaries() 
{ 
    return Users.Include(u => u.BillingAddress) 
     .Include(u => u.BillingAddress.Country) 
     .OrderBy(u => u.Email).Select(u => new UserSummary 
     { 
      Id = u.Id, 
      UserName = u.UserName, 
      Email = u.Email, 
      BillingAddress = u.BillingAddress, 
      Approved = u.Approved, 
      Admin = u.Admin, 
      Roles = u.Roles.Select(r => r.Name) 
     }); 
} 

Эта проблема у меня в том, что BillingAddress.Country не хочет заряжание, как я 'явно указано. Поскольку я не делаю .ToList(), я получаю InvalidOperationException: уже открыт DataReader, связанный с этой командой, который должен быть закрыт первым.

Если я делаю ToList(), исключение уходит, но вместо 1 запроса он становится n + 1 запросами, потому что он ленивый загружает страну.

Как я могу загрузить страну для BillingAddress и избежать n + 1 запросов?


Update: У меня было подозрение, что, потому что я не проецируя Country на в UserSummary он игнорируется, несмотря на явно включены. Я добавил свойство Country классу UserSummary и проецировал страну на него. Теперь он включен в исходный запрос.

Есть ли способ заставить его загрузить в UserSummary.BillingAddress.Country, а не включать его как отдельную собственность?

+0

Попробуйте использовать '.INCLUDE (и => u.BillingAddress.Select (а => a.Country))' –

+0

Если я не хватает специальной Linq ссылки, 'Select', кажется, только доступен по коллекциям. – Sam

ответ

0
Users.Include("BillingAddress.Country") 
+0

Это уже в моем коде – Sam

 Смежные вопросы

  • Нет связанных вопросов^_^