使用EF Code First,如何包含嵌套的嵌套数据

时间:2016-02-25 00:52:21

标签: entity-framework code-first

我有三个实体,如下所述。在我的种子方法中,我通常会在每个类中添加一条记录,这会导致发言人拥有一个拥有租户的会话。

当我通过以下方式实现演讲者数据时:

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

我获得了会话数据,但我也希望在会话记录中填充租户(这是扬声器记录的一部分)。

我无法找出让发言人拥有租户记录的发言人的语法。

我不确定这是否相关,但我序列化我的发言人&#34;当我将其反序列化时,我错过了租客。

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 个答案:

答案 0 :(得分:1)

您需要Include这两个值,例如:

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

这将包括Tenant个对象的Session以及原始Session个对象。

来自ObjectQuery.Include documentation

  

路径包罗万象。例如,如果包含调用表示包含(&#34; Orders.OrderLines&#34;),则不仅包括OrderLines,还包括订单。

您还可以添加using System.Data.Entity;以使用带有lambda表达式的Include,这样您就不必依赖魔术字符串。