【问题标题】:Including related entities across a many-to-many relationship [duplicate]包括跨多对多关系的相关实体[重复]
【发布时间】:2018-03-21 15:25:48
【问题描述】:

我与实体框架建立了多对多关系,如下所示:

public class Student
{
    public int StudentId { get; set; }
    public string Name { get; set; }
    public DateTime Birthday { get; set; }

    public ICollection<StudentClass> StudentClasses { get; set; }
}

public class Class
{
    public int ClassId { get; set; }
    public string Name { get; set; }
    public string Location { get; set; }

    public ICollection<StudentClass> StudentClasses { get; set; }
}

public class StudentClass
{
    public int StudentId { get; set; }
    public Student Student { get; set; }

    public int ClassId { get; set; }
    public Class Class { get; set; }
}

这很好用,我正在尝试获取学生,但也获取他们的相关课程。我有这个:

var studentsWithClasses = await _dbContext.Students
    .Include(s => s.StudentClasses)
    .ToListAsync();

这让我获得了 StudentClasses 集合中的 StudentId 和 ClassId,但 Class 对象为空。但我想访问 Class 对象中的数据,以便查看所有 Student 班级的名称和位置。

有没有办法将它也包含在内,还是我需要进行单独的数据库调用?

【问题讨论】:

  • Student 不能是 null 与此查询。要获得Class,您需要ThenIncude(sc =&gt; sc.Class)
  • @IvanStoev - 我不能做ThenInclude(sc =&gt; sc.Class) 因为StudentClasses 对象是一个集合
  • 是的,你可以。见EF Core Second level ThenInclude missworks。现在在documentation中特别提到——Including multiple levels下的
  • 你是对的,这确实有效。尽管出于某种原因,Intellisense 没有接收到它,但它确实有效。非常感谢!

标签: c# entity-framework linq .net-core entity-framework-core


【解决方案1】:

您可以使用字符串 Include 来执行此操作(请注意,智能感知不会告诉您该属性是否实际存在)。

var studentsWithClasses = await _dbContext.Students
    .Include("StudentClasses.Class")
    .ToListAsync();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-08
    • 2013-04-25
    • 2018-06-07
    • 1970-01-01
    • 1970-01-01
    • 2016-08-24
    • 1970-01-01
    相关资源
    最近更新 更多