实体框架核心多对多实现

时间:2019-09-26 06:44:04

标签: entity-framework .net-core entity-framework-core many-to-many ef-core-3.0

那么多对多并没有进入.NET Core 3.0版本,可惜...

我知道如何使用连接实体来实现m:m,如以下示例所示:https://stackoverflow.com/a/53972658/980917

我的问题是关于模型类本身的。考虑学生和班级示例:

Student - has ICollection<StudentClass> 

StudentClass - joining entity

Class - has ICollection<StudentClass> 

这对于数据加载是很好的。但是,在您的业务逻辑中,StudentClasses集合没有用,因为它只是一个具有2个ID的连接实体。与学生班级一起使用时,您实际上希望在学生中包含班级的实际集合和< 中的strong>学生。 (即: Student.Classes Class.Students

检索多对多集合(不加入实体)的当前推荐的方法/解决方法是什么?

我们是否必须基于加入实体进行第二次选择,还是有一些更优雅的选择?

一个简单的例子或链接会很棒。谢谢。

1 个答案:

答案 0 :(得分:1)

  

当前推荐的检索多对多集合(不加入实体)的方法/解决方法是什么?

您可以使用.Include扩展方法轻松完成以下操作:

让我们说您的Student类如下:

public class Student
{
  public int Id {get; set;}
  public string StudentName {get; set;}

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

要检索所有具有相关班级的学生,

var studentsWithClasses = _context.Students.Include(s => s.StudentClasses).ToList();

要检索单个学生及其班级:

var studentWithClasses = _context.Students.Where(s => s.Id = studentId).Include(s => s.StudentClasses).FirstOrDefault();