2016-02-25 2 views
1

У меня есть три объекта, как определено ниже. В моем методе семени я тривиально добавляю по одной записи в каждый класс, что приводит к тому, что у говорящего есть сеанс, в котором есть арендатор.С кодом EF Сначала, как включить вложенные вложенные данные

Когда я материализовать данные акустические системы с этим:

List<Speaker> speakers = db.Speakers.Include("Sessions").ToList(); 

Я получаю данные сессии, но я также хочу Арендатор заселяться в записи сессии (которые являются частью записей акустических систем).

Я не могу понять синтаксис, чтобы получить ораторы, у которых есть сеансы с записью арендатора.

Я не уверен, что это связано, но я сериализую свои «колонки», и когда я отказываюсь от него, я пропускаю арендатора.

public DbSet<Tenant> Tenants { get; set; } 
public DbSet<Speaker> Speakers { get; set; } 
public DbSet<Session> Sessions { get; set; } 

[Serializable] 
public class Tenant 
{ 
    public int Id { get; set; } 
} 

[Serializable] 
public class Speaker 
{ 
    public int Id { get; set; } 

    public virtual List<Session> Sessions { get; set; } 
} 

[Serializable] 
public class Session 
{ 
    public int Id { get; set; } 
    public virtual Tenant Tenant { get; set; } 
    public virtual List<Speaker> Speakers { get; set; } 

} 

*** Ответ:

List<Speaker> speakersAll1 =_context. 
          Speakers. 
          Include(a => a.Sessions.Select(b => b.Tenant)). 
          ToList(); 

ответ

1

Вам нужно Include как ваши ценности, как это:

List<Speaker> speakers = db.Speakers.Include("Sessions.Tenant").ToList(); 

Это будет включать Tenant от ваших Session объектов, а также как ваши оригинальные Session объектов.

От ObjectQuery.Include documentation:

Дорожки все включено. Например, если входящий вызов указывает Include («Orders.OrderLines»), будут включены не только OrderLines, но и Orders.

Вы также можете добавить using System.Data.Entity; использовать Include с лямбда-выражения, так что вы не должны полагаться на волшебных строк.

+0

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

+0

@PeterKellner Я вижу, что вы использовали 'System.Data.Entity', что обычно лучше, чем полагаться на магические строки. Надеюсь, я могу помочь. Также: если вы действительно использовали этот другой метод для его решения, вы должны отправить его в качестве ответа. – johnnyRose