繁体   English   中英

ASP.NET 核心 - 如何将 SQL 服务器语句转换为实体框架核心

[英]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 回到基础

  1. 您需要学习如何在 EF 中构建 model。 web上有很多教程; SO不鼓励意见; 所以我只放一个微软官方文档的链接。 你最终会得到这样的东西:
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

  1. 您需要研究 Entity Framework 6 中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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM