[英]Scaffolding SQL Server Views with Entity Framework 7 in ASP.NET Core 1.0?
[英]ASP.NET Core - How to convert SQL Server statement to Entity Framework Core
我有这个 SQL 服务器查询,它可以在 SQL 服务器中提供所需的结果:
SQL 服务器查询:
SELECT
s.RegNumber,
s.AdmissionDate,
c.CourseName
FROM student AS s
JOIN student_course AS sc
ON s.id = sc.StudentId
JOIN course AS c
ON c.id = sc.CourseId
WHERE c.Id = '67A21699-DFE6-4CB6-96B6-E009FD389596';
学生课程:
public class StudentCourses
{
public Guid Id { get; set; }
public Guid StudentId { get; set; }
public Guid CourseId { get; set; }
}
但是,当我尝试将其转换为 ASP.NET Core-6 Entity Framework 时,如下所示:
var sc = Context.StudentCourses
.Where(x => x.CourseId == '67A21699-DFE6-4CB6-96B6-E009FD389596')
.Include(x => x.Student)
.Include(x => x.Course);
return sc;
它给了我学生的详细信息,如 null。
我该如何解决这个问题?
谢谢。
为了了解如何做到这一点,您需要 go 回到基础
public class Student
{
public Guid Id { get; set; }
public string Name { get; set; }
public ICollection<Course> Courses { get; set; }
}
public class Course
{
public Guid Id { get; set; }
public string Name { get; set; }
public ICollection<Student> Students { get; set; }
}
请注意,没有 class StudentCourses
!
many-to-many
关系的实现。同样,您应该从Microsoft官方文档开始; 但这是一个复杂的话题——所以你可能需要花更多的时间在一些教程上。 在DbContext
,您将拥有如下内容:modelBuilder.Entity<Students>()
.HasMany(p => p.Courses)
.WithMany(p => p.Students)
一旦您对此有了基本的了解,编写 LINQ 语句就非常简单了。 请记住,您不会将 SQL 转换为 LINQ
var sc = _context.Courses
.Where(x => x.CourseId == '67A21699-DFE6-4CB6-96B6-E009FD389596')
.Select(c => new {
c.CourseId,
c.Name,
c.Students
});
另请注意 - 每当您使用Include()
时,它都是“代码气味”; 这意味着你需要审查你的设计,也许还要学习更多的教程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.