c# - 在c#app中,如何在SQL中连接子任务表的外键?
问题描述
我正在尝试使用 C# Web API 和 SQL Server 创建任务管理系统。
这是我想要实现的目标:
- 用户可以发送 POST 请求来创建任务(带有可选的子任务)。
- 用户可以发送 GET 请求来检索任务(如果存在,则在响应中显示所有子任务)
以下是我当前的一些文件:
任务 DTO:
public class TaskDto
{
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public DateTime StartDate { get; set; }
public DateTime FinishDate { get; set; }
public string Status { get; set; }
}
任务.cs:
public class Task
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public DateTime StartDate { get; set; }
public DateTime FinishDate { get; set; }
public string Status { get; set; }
}
子任务.cs:
public class SubTask
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public string Status { get; set; }
}
使用上面的代码,我目前能够发布和获取任务,但我正在努力添加子任务部分。
有人可以建议我需要做什么才能满足这个要求吗?
非常感谢提前
解决方案
你的课程会像这样连接起来......
public class Task
{
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public virtual ICollection<SubTask> SubTask { get; set; }
}
public class SubTask
{
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public int? TaskId { get; set; }
public Task Task { get; set; }
}
你可以看到它Task
有一个集合,SubTask
并且SubTask
有Task
一个Task
属性和一个TaskId
.
更新:正如我最初所想的那样,由于您没有首先使用 EF 代码。
您的 DTO 可能只有一个子任务列表,如下所示:
public class TaskDto
{
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public virtual List<SubTask> SubTask { get; set; }
}
然后,您可以执行以下操作:
var tasks = (from t in _db.Tasks
join st in _db.Sub Tasks on st.Id equals t.SubTaskId
select new TaskDto
{
Id = t.Id,
Name = t.Name,
Description = t.Description,
SubTask = st
});
这都是手写的,但它会沿着这些路线。
推荐阅读
- azure - Resource group with Azure AD Domain Service is not getting deleted
- html - 如何修复或规范 Mailchimp 的 MJML 输出?
- laravel-5 - 从视图内的按钮调用控制器功能?
- google-chrome - 如何在 ubuntu 上安装 Google chrome 版本 73.0.3683.86?
- python - 比较长度不等的列表没有错误
- php - file_put_contents 只写最后一行
- scala - Flink ML - java.lang.ClassNotFoundException:org.apache.flink.ml.math.DenseVector
- python - sqlite3.OperationalError: near "-": syntax error 是什么意思?
- android - 如何在 Android Studio 中修复 Flutter 的 AndroidX 兼容性?
- python-3.x - 使用 kivy 从类继承变量