EF 7多对多关系没有FK到连接器表

时间:2016-05-11 05:13:46

标签: entity-framework asp.net-core entity-framework-core

我正在使用Entity Framework 7 RC1,我实际上是在尝试创建一个字段,以便我可以持有学生标准(一个学生可以有很多标准,每个标准可以属于许多学生)。在asp.net文档之后,我设置了表格,并使用一些组合数据在SQL Server中手动填写了Student表,Standard表和StudentStandard表。但是,当我在运行时调试代码/视图时,我发现StudentStandards字段是' null'当我在控制器中执行getAll时。我使用以下代码访问视图中的此字段:model.Students.StudentStandards.Select(c => c.StandardId)但这并没有提供任何内容。

    public class Student
{
    public int StudentID { get; set; }
    public string StudentName { get; set; }
    public DateTime DateOfBirth { get; set; }
    public byte[] Photo { get; set; }
    public decimal Height { get; set; }
    public float Weight { get; set; }

    public ICollection<StudentStandard> StudentStandards { get; set; }

}

public class StudentStandard
{
    [ForeignKey("Student")]
    public int StudentId { get; set; }
    public Student Student { get; set; }

    [ForeignKey("Standard")]
    public int StandardId { get; set; }
    public Standard Standard { get; set; }
}

public class Standard
{

    public int StandardId { get; set; }
    public string StandardName { get; set; }

    public ICollection<StudentStandard> StudentStandards { get; set; }
}

这是使用迁移创建它之后表格的样子:

SQL server tables and columns

我的问题:我如何获得这种m:m关系来存储和检索这些数据?

2 个答案:

答案 0 :(得分:1)

您之后所谓的渴望加载。默认情况下,任何EF查询都将获取实体本身的记录,但不会获取属于它的外键表的记录。如果您对引入相关表数据感兴趣,则应使用Include()函数并指定您感兴趣的外键表,即您的案例中的Standards表。你的EF Linq看起来像这样:

//context is your DbContext object
context.Students.Include(s => s.Standards).ToList();

答案 1 :(得分:0)

我必须使用以下代码急切加载表:

    context.Students
   .Include(a => a.StudentStandards)
   .ThenInclude(b => b.Standard);