2017-01-30 10 views
-1

для кода первых моделей:Entity Framework многоуровневые таблицы с помощью LINQ

public class User 
{ 
    [Key] 
    public long Id { get; set; } 
    public virtual List<Address> Addresses { get; set; } 
    public string UserName { get; set; } 
} 

public class Address 
{ 
    [Key] 
    public long Id { get; set; } 
    public string Reference { get; set; } 
    public string Street { get; set; } 
} 

Я создал рамочную сущность модель из кода первой. Его работа прекрасна. Теперь я хочу запросить выбор для таблицы пользователя с помощью linq.

public IEnumerable GetLicensee() 
{ 
    using (var db = new DataModelContext()) 
    { 
     IEnumerable query = (from b in db.User 
          select new { UserName= b.UserName,Address=b.Addresses }).ToList(); 

     return query; 
    } 
} 

Это не возвращает адресную таблицу, возвращает только имя пользователя.

+0

Вы уверены, что таблица базы данных содержит соответствующие адреса? Вы проверяли сгенерированные таблицы - в таблице «Адрес» должен быть столбец «User_Id». –

+0

Да, user_id есть. проблема исправлена ​​с помощью include («адресов») –

+0

. Исправленный запрос не может быть исправлен с помощью 'Include'. Если он был исправлен, чем запрос отличается, и сообщение вводит в заблуждение. –

ответ

2

EF по умолчанию включен отложенной загрузке, поэтому Вам нужно использовать жадную загрузку при вызове Include(), этот метод также получить Сопутствующие Сущности, в вашем случае Include("Addresses") метода получить Сопутствующие Adressess

Нетерпеливых загрузок является процессом, при котором запрос для одного типа сущности также загружает связанные объекты как часть запроса. Желательная загрузка достигается с помощью метода Include.

public IEnumerable GetLicensee() 
{ 
     using (var db = new DataModelContext()) 
     { 
     IEnumerable query = (from b in db.User.Include("Addresses") 
        select new { UserName= b.UserName,Address=b.Addresses }).ToList(); 

      return query; 
     } 
} 

Здесь найти more

+1

OP использует ** проекционный ** запрос, поэтому не требуется никакой загрузки или какой-либо другой загрузки. –

+0

@IvanStoev, если ленивая загрузка находится на – Alex

+0

, ее выдающая ошибка (u => u.addresses): Невозможно преобразовать лямбда-выражение для ввода «string», потому что это не тип делегата. –

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

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