【问题标题】:How do I write a Web api which deals with tables that are connected with a foreign key in c#?如何编写一个 Web api 来处理与 c# 中的外键连接的表?
【发布时间】:2019-02-18 03:48:19
【问题描述】:

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

学生表有一个 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; }
    }

我正在从事的项目是一个 .net web api 项目。 我给学生写的post方法如下

        try
        {
            using (var connection = new SqlConnection(connectionString))
            {
                connection.Open();

                using (var cmd = new SqlCommand())
                {
                    cmd.CommandType = System.Data.CommandType.Text;
                    cmd.CommandText = "insert into student (name) " +
                        "values (@name)";

                    cmd.Connection = connection;
                    cmd.Parameters.AddWithValue("@name", student.name);

                    cmd.ExecuteNonQuery();
                }
            }
        }
        catch (SqlException ex)
        {

            Debug.WriteLine(ex.Message);
        }

这是我的问题。如何在考虑外键的情况下编写我的方法?我找不到任何代码示例。都是针对实体框架的...

【问题讨论】:

  • 这是一个 SQL 问题。查看joins
  • 您的问题是什么? 考虑外键是什么意思?
  • 你需要更具体一点,什么方法等等。你尝试了什么。

标签: c# .net asp.net-web-api


【解决方案1】:

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

[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
        }
}

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

【讨论】:

    猜你喜欢
    • 2013-08-25
    • 1970-01-01
    • 1970-01-01
    • 2015-02-06
    • 1970-01-01
    • 2018-05-05
    • 2019-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多