C# 如何从实体框架核心构建的多对多关系中获取数据?
我和你建立了多对多的关系C# 如何从实体框架核心构建的多对多关系中获取数据?,c#,asp.net-core,entity-framework-core,many-to-many,C#,Asp.net Core,Entity Framework Core,Many To Many,我和你建立了多对多的关系 公共班级学生 { 公共int StudentId{get;set;} 公共字符串名称{get;set;} 公共IList学生课程{get;set;} } 公共课 { public int CourseId{get;set;} 公共字符串CourseName{get;set;} 公共字符串说明{get;set;} 公共IList学生课程{get;set;} } 公共课学生课程 { 公共int StudentId{get;set;} 公立学生学生{get;set;} pub
公共班级学生
{
公共int StudentId{get;set;}
公共字符串名称{get;set;}
公共IList学生课程{get;set;}
}
公共课
{
public int CourseId{get;set;}
公共字符串CourseName{get;set;}
公共字符串说明{get;set;}
公共IList学生课程{get;set;}
}
公共课学生课程
{
公共int StudentId{get;set;}
公立学生学生{get;set;}
public int CourseId{get;set;}
公共课程{get;set;}
}
如何按学生ID列出课程列表
如何将其转换为IQueryable(需要asp.net)
谢谢。如果你只想得到一个学生正在学习的所有课程,有多种方法可以做到这一点。 我猜您的数据库上下文中有一个
DbSet StudentCourses
条目。
您只需调用context.StudentCourses.Include(x=>x.Student).Where(entry=>entry.CourseId==theIdYouWant).选择(entry=>entry.Student)
请注意
.Include()
,它告诉实体框架将学生表与StudentCourse表“连接”,这样您就可以得到实际的学生实体,而不仅仅是ID(如果您不包含Include,则student属性很可能被设置为null)如果你只想得到一个学生正在学习的所有课程,有多种方法可以做到这一点。
我猜您的数据库上下文中有一个DbSet StudentCourses
条目。
您只需调用context.StudentCourses.Include(x=>x.Student).Where(entry=>entry.CourseId==theIdYouWant).选择(entry=>entry.Student)
请注意
.Include()
,它告诉Entity Framework将student表与StudentCourse表“连接”,这样您就可以得到实际的学生实体,而不仅仅是ID(如果您不包含Include,很可能student属性只会设置为null)不需要Include
,甚至可以忽略它。如果显式选择,为什么Student
会为空?我现在有一种事实检查的方法,但在我使用的ef core版本中它就是这样工作的是的,它工作,但不是必需的。在发布答案之前,最好先测试一下这些东西。确定性软件中没有“可能”这样的东西。它是,还是不是。仍然有人认为它增加了明确的必要性与否,但这取决于个人偏好。我会尝试在以后的回答中添加更多细节,但这是凌晨1点写的。我不同意。不添加操作代码只会导致混淆。它助长了一种广泛传播的误解,即包括
是使预测有效的必要条件。为了清晰起见,Select(entry=>entry.Student)
足够清晰,尤其是因为它是决定输出的唯一部分。不需要包含,甚至可以忽略它。如果显式选择,为什么Student
会为空?我现在有一种事实检查的方法,但在我使用的ef core版本中它就是这样工作的是的,它工作,但不是必需的。在发布答案之前,最好先测试一下这些东西。确定性软件中没有“可能”这样的东西。它是,还是不是。仍然有人认为它增加了明确的必要性与否,但这取决于个人偏好。我会尝试在以后的回答中添加更多细节,但这是凌晨1点写的。我不同意。不添加操作代码只会导致混淆。它助长了一种广泛传播的误解,即包括
是使预测有效的必要条件。为了清晰起见,Select(entry=>entry.Student)
足够清晰,尤其是因为它是决定输出的唯一部分。
public class Student
{
public int StudentId { get; set; }
public string Name { get; set; }
public IList<StudentCourse> StudentCourses { get; set; }
}
public class Course
{
public int CourseId { get; set; }
public string CourseName { get; set; }
public string Description { get; set; }
public IList<StudentCourse> StudentCourses { get; set; }
}
public class StudentCourse
{
public int StudentId { get; set; }
public Student Student { get; set; }
public int CourseId { get; set; }
public Course Course { get; set; }
}