c# - 如何编写一个 Web api 来处理与 c# 中的外键连接的表?
问题描述
我正在尝试为学生表和学生所学的课程编写一个 web api。控制器单独工作正常。我的意思是获取、发布、放置和删除方法正在工作。
学生表有一个 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);
}
这是我的问题。如何在考虑外键的情况下编写我的方法?我找不到任何代码示例。它们都是用于实体框架...
解决方案
例如,要获取您可以使用的所有学生和课程:
[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) 将节省大量时间。如果您需要使用自定义查询,您将有可能这样做。
推荐阅读
- ajax - 在选择其他 -MVC 时填充一个下拉列表
- python - 提前比较两个或多个 csv 文件
- firebase - 当存储在firestore数据库中的日期是今天的日期时如何触发功能?
- anylogic - 如何在自定义路由中使用 ILocation 源和目标?
- reactjs - 如何使用 react-dates 进行 CSS 样式设置?
- c# - 检测到 Microsoft.EntityFrameworkCore.Install 的版本冲突
- node.js - 是否可以从 Node 脚本运行 package.json 脚本?
- javascript - 如何对数组中的时间字符串求和?
- cors - 为什么会出现飞行前请求?
- vmware - 在 vmware 工作站 15 播放器中将文本从主机复制粘贴和剪切到来宾