我正在使用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; }
}
这是使用迁移创建它之后表格的样子:
我的问题:我如何获得这种m:m关系来存储和检索这些数据?
答案 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);