2017-01-08 10 views
3

Использование EF Core 1.1.0EF Core Collection Загрузить .. из коллекции

У меня есть модель, в которой есть коллекции, которые сами имеют коллекции.

public class A { 
    public string Ay {get;set;}  
    public List<B> Bees {get;set;} 
} 

public class B { 
    public string Be {get;set;} 
    public List<C> Seas {get;set;} 
} 

public class C { 
    public string See {get;set;} 
    public bool InDark {get;set;} 
    public List<D> Sigh {get;set;} 
} 

Теперь .. A огромен, и в 99% случаев я не забочусь о B, поэтому он не загружается. Если бы я загрузить его, то это будет что-то вроде:

context.A.Include(a=>a.Bees).ThenInclude(b=>b.Seas).ThenInclude(c=>c.Sigh)... 

Теперь давайте говорить, что я уже погрузите до и 1% происходит для меня, чтобы заботиться о В. Мы не имеем отложенной загрузки но последний выпуск действительно дал нам явную загрузку. Потрясающие.

context.Entry(A).Collection(a=>a.Bees).Load(); 

Проблема заключается в том, что нет возможности включить дополнительные коллекции внутри B? У меня нет выбора, кроме как перезагрузить A с .Include.ThenInclude.ThenInclude.Etc?

+0

Вы можете создать экземпляр Queryable , а затем добавить вызовы для Включать и ThenInclude, прежде чем вызвать метод ToList, вы пробовали это? –

ответ

5

К счастью, у вас есть возможность. Вместо прямого вызова Load вы можете использовать метод Query и применять как можно больше Include/ThenInclude.

Для вашего образца, было бы что-то вроде этого:

context.Entry(A).Collection(a => a.Bees) 
    .Query() 
    .Include(b => b.Seas).ThenInclude(c => c.Sigh)... 
    .Load(); 
+1

Я действительно забыл об этом, спасибо, что напомнил мне. Он также работал в EF6. –

+0

Спасибо .. это сделал трюк. Я надеялся, что они будут делать ленивую загрузку раньше, чем позже, но, тем не менее, это позволяет мне создавать свои собственные ленивые шаблоны в моем хранилище. – imukai

+0

Привет @Gert, вы не могли забыть что-то :) Приветствия и HNY! –