2015-03-11 2 views
0

У меня есть следующие LINQ запрос:LINQ к Entities - использование включают с навигационными свойствами

return ClientContext.Services.Include("Location").Include("Service1").Where(s => s.FkLocationId == currentLocation); 

Мой класс Сервис выглядит следующим образом:

public partial class Service { 
 
     public Service() 
 
     { 
 
      this.Service1 = new HashSet<Service>(); 
 
     } 
 
    
 
    public virtual ICollection<Service> Service1 { get; set; } 
 
public virtual Location Location { get; set; } 
 
    }

С моей LINQ Query , Я ожидаю найти местоположение данного сервиса, а также его дочерние службы, оба из которых я могу получить правильно. Но когда я проверяю внутри объектов службы внутри ICollection<Service> Service1, объект местоположения имеет значение null.

Почему я не могу получить навигацию по местоположению объекта «Сервис» в этой коллекции?

Что было бы самым простым способом сделать это?

+0

Вы рвутся связанные погрузочные объекты, так что не нужно виртуального ключевого слова на ваших навигационных свойств. Вы пытались добавить MultipleActiveResultSets = True в строку подключения? – SWilko

+0

Класс service() на самом деле является кодом, генерируемым EF. – devC

+0

Тогда вам не нужно включать в себя, поскольку EF должен лениться на загрузке (чего нет здесь). Вы протестировали сервис с помощью [Fiddler] (http://www.telerik.com/fiddler), чтобы узнать, что происходит ? – SWilko

ответ

0

Самый простой способ это:

// This will load all Services, related Location and related Service1 and Location 
ClientContext.Services.Include(m => m.Location).Include(m => m.Service1.Select(s => s.Location)).Where(s => s.FkLocationId == currentLocation); 


// This will load all Services, related Location and related Service1 and Location using a string 
ClientContext.Services.Include("Location").Include("Service1.Location")).Where(s => s.FkLocationId == currentLocation); 

More information about eager-loading and lazy loading

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