使用 EF Code First,如何包含嵌套的嵌套数据
With EF Code First, How to include nested nested data
我有如下定义的三个实体。在我的种子方法中,我简单地向每个 class 添加一个记录,这导致一个具有 session 的扬声器有一个租户。
当我用这个具体化说话人数据时:
List<Speaker> speakers = db.Speakers.Include("Sessions").ToList();
我得到了 Session 数据,但我还希望在 Session 记录中填充租户(这是演讲者记录的一部分)。
我无法弄清楚让 session 有租户记录的演讲者的语法。
我不确定这是否相关,但我序列化了我的 "speakers",当我反序列化它时,我错过了租户。
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();
您需要 Include
您的两个值,如下所示:
List<Speaker> speakers = db.Speakers.Include("Sessions.Tenant").ToList();
这将包括来自您的 Session
对象的 Tenant
以及您的原始 Session
对象。
来自ObjectQuery.Include documentation:
Paths are all-inclusive. For example, if an include call indicates Include("Orders.OrderLines"), not only will OrderLines be included, but also Orders.
您还可以添加 using System.Data.Entity;
以将 Include
与 lambda 表达式一起使用,这样您就不必依赖魔术字符串。
我有如下定义的三个实体。在我的种子方法中,我简单地向每个 class 添加一个记录,这导致一个具有 session 的扬声器有一个租户。
当我用这个具体化说话人数据时:
List<Speaker> speakers = db.Speakers.Include("Sessions").ToList();
我得到了 Session 数据,但我还希望在 Session 记录中填充租户(这是演讲者记录的一部分)。
我无法弄清楚让 session 有租户记录的演讲者的语法。
我不确定这是否相关,但我序列化了我的 "speakers",当我反序列化它时,我错过了租户。
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();
您需要 Include
您的两个值,如下所示:
List<Speaker> speakers = db.Speakers.Include("Sessions.Tenant").ToList();
这将包括来自您的 Session
对象的 Tenant
以及您的原始 Session
对象。
来自ObjectQuery.Include documentation:
Paths are all-inclusive. For example, if an include call indicates Include("Orders.OrderLines"), not only will OrderLines be included, but also Orders.
您还可以添加 using System.Data.Entity;
以将 Include
与 lambda 表达式一起使用,这样您就不必依赖魔术字符串。