C# 如何编写Web api来处理与c中的外键连接的表?

C# 如何编写Web api来处理与c中的外键连接的表?,c#,.net,asp.net-web-api,C#,.net,Asp.net Web Api,我正在尝试为学生表和学生所学的课程编写一个web api。控制器单独工作正常。我的意思是get、post、put和delete方法都很有效 Student表的id为主键、名称和课程 课程表的id为主键,学生id为外键,以及课程名称 模型类是 public class Student { public int id { get; set; } public string name{ get; set; } public ICollec

我正在尝试为学生表和学生所学的课程编写一个web api。控制器单独工作正常。我的意思是get、post、put和delete方法都很有效

Student表的id为主键、名称和课程

课程表的id为主键,学生id为外键,以及课程名称

模型类是

    public class Student
    {
        public int id { get; set; }
        public string name{ get; set; }
        public ICollection<Courses> Courses { get; set; } 
    }

    public class Courses
    {
        public int id { get; set; }
        public int studentid { get; set; }
        public string name{ get; set; }
    }

这是我的问题。如何编写考虑外键的方法?我找不到任何代码示例。所有这些都是用于实体框架…

例如,为了获得您可以使用的所有学生和课程:

[HttpGet]
public ActionResult<StudentViewModel> GetAllStudents()
{
        try
        {
            using (var connection = new SqlConnection(connectionString))
            {
                connection.Open();

                using (var cmd = new SqlCommand())
                {
                    cmd.CommandType = System.Data.CommandType.Text;
                    cmd.CommandText = "SELECT s.id, s.name, c.Name as courseName FROM Student s INNER JOIN Courses c on c.studentId = s.id";
                    cmd.Connection = connection;


                    SqlDataAdapter da = new SqlDataAdapter(cmd);

                    da.Fill(dataTable);
                    connection.Close();
                    da.Dispose();

                    //Fill result view model from dataTable which will contain all data which you want from DB. 
                }
            }
        }
        catch (SqlException ex)
        {
            //Log exception
        }
}

但这只是一个样本。在现实世界中,最好在控制器中的操作和获取数据的业务逻辑之间分割逻辑。使用对象关系映射ORM(类似EntityFramework)将节省大量时间。如果您需要使用自定义查询,则可以使用。

这是一个SQL问题。调查一下,你的问题是什么?考虑外键是什么意思?你需要更具体一点,什么方法等等。你尝试过什么。
[HttpGet]
public ActionResult<StudentViewModel> GetAllStudents()
{
        try
        {
            using (var connection = new SqlConnection(connectionString))
            {
                connection.Open();

                using (var cmd = new SqlCommand())
                {
                    cmd.CommandType = System.Data.CommandType.Text;
                    cmd.CommandText = "SELECT s.id, s.name, c.Name as courseName FROM Student s INNER JOIN Courses c on c.studentId = s.id";
                    cmd.Connection = connection;


                    SqlDataAdapter da = new SqlDataAdapter(cmd);

                    da.Fill(dataTable);
                    connection.Close();
                    da.Dispose();

                    //Fill result view model from dataTable which will contain all data which you want from DB. 
                }
            }
        }
        catch (SqlException ex)
        {
            //Log exception
        }
}