首页 > 解决方案 > 在c#app中,如何在SQL中连接子任务表的外键?

问题描述

我正在尝试使用 C# Web API 和 SQL Server 创建任务管理系统。

这是我想要实现的目标:

以下是我当前的一些文件:

任务 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; }        
}

使用上面的代码,我目前能够发布和获取任务,但我正在努力添加子任务部分。

有人可以建议我需要做什么才能满足这个要求吗?

非常感谢提前

标签: c#sql

解决方案


你的课程会像这样连接起来......

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并且SubTaskTask一个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
                        });

这都是手写的,但它会沿着这些路线。


推荐阅读