C# 在.net内核中使用两个外部id键创建模型类和控制器

C# 在.net内核中使用两个外部id键创建模型类和控制器,c#,asp.net-core,C#,Asp.net Core,在我尝试学习.net core的过程中,我用一个非常简单的想法开始了这个基本项目的工作,即创建两个名为projects和consultants的表,以及两个表之间的多对多关系,这将导致创建第三个名为assign的表,该表将同时包含project表和consultant表的id 我已经为two tables项目和consultant(您可以看到下面的模型和控制器)创建了一个完整的工作后端,但是我不知道如何表示多对多关系,以便为assign table和crud操作创建类和控制器 请查看以下项目和顾

在我尝试学习.net core的过程中,我用一个非常简单的想法开始了这个基本项目的工作,即创建两个名为projects和consultants的表,以及两个表之间的多对多关系,这将导致创建第三个名为assign的表,该表将同时包含project表和consultant表的id

我已经为two tables项目和consultant(您可以看到下面的模型和控制器)创建了一个完整的工作后端,但是我不知道如何表示多对多关系,以便为assign table和crud操作创建类和控制器

请查看以下项目和顾问表的类别和控制器:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace WebAPI_C5.Models
{
    public class Consultant
    {
        public int ConsultantId { get; set; }
        public string ConsultantName { get; set; }

    }
}
ConsultantController.cs:

namespace WebAPI_C5.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class ConsultantController : ControllerBase
    {
        // to access the configuration from the app.settings file 
        // we need to make use of the dependency injection 
        private readonly IConfiguration _configuration;
        public ConsultantController(IConfiguration configuration)
        {
            _configuration = configuration;
        }
        // API method to get project details 
        [HttpGet]
        public JsonResult Get()
        {
            string query = @" select ConsultantId,ConsultantName from dbo.Consultant";
            DataTable table = new DataTable();
            string sqlDataSource = _configuration.GetConnectionString("ProjectAppCon");
            SqlDataReader myReader;
            using (SqlConnection myCon = new SqlConnection(sqlDataSource))
            {
                myCon.Open();
                using (SqlCommand myCommand = new SqlCommand(query, myCon))
                {
                    myReader = myCommand.ExecuteReader();
                    table.Load(myReader);
                    myReader.Close();
                    myCon.Close();
                }
            }
            return new JsonResult(table);
        }
        [HttpPost]
        public JsonResult Post(Consultant cons)
        {
            string query = @"
                    insert into dbo.Consultant values 
                    ('" + cons.ConsultantName + @"')
                    ";
            DataTable table = new DataTable();
            string sqlDataSource = _configuration.GetConnectionString("ProjectAppCon");
            SqlDataReader myReader;
            using (SqlConnection myCon = new SqlConnection(sqlDataSource))
            {
                myCon.Open();
                using (SqlCommand myCommand = new SqlCommand(query, myCon))
                {
                    myReader = myCommand.ExecuteReader();
                    table.Load(myReader); ;
                    myReader.Close();
                    myCon.Close();
                }
            }

            return new JsonResult("Added Successfully");
        }
        // to update data 
        [HttpPut]
        public JsonResult Put(Consultant cons)
        {
            string query = @"
                    update dbo.Consultant set 
                    ConsultantName = '" + cons.ConsultantName + @"'
                    where ConsultantId = " + cons.ConsultantId + @" 
                    ";
            DataTable table = new DataTable();
            string sqlDataSource = _configuration.GetConnectionString("ProjectAppCon");
            SqlDataReader myReader;
            using (SqlConnection myCon = new SqlConnection(sqlDataSource))
            {
                myCon.Open();
                using (SqlCommand myCommand = new SqlCommand(query, myCon))
                {
                    myReader = myCommand.ExecuteReader();
                    table.Load(myReader); ;

                    myReader.Close();
                    myCon.Close();
                }
            }

            return new JsonResult("Updated Successfully");
        }
        [HttpDelete("{id}")]
        public JsonResult Delete(int id)
        {
            string query = @"
                    delete from dbo.Consultant
                    where ConsultantId = " + id + @" 
                    ";
            DataTable table = new DataTable();
            string sqlDataSource = _configuration.GetConnectionString("ProjectAppCon");
            SqlDataReader myReader;
            using (SqlConnection myCon = new SqlConnection(sqlDataSource))
            {
                myCon.Open();
                using (SqlCommand myCommand = new SqlCommand(query, myCon))
                {
                    myReader = myCommand.ExecuteReader();
                    table.Load(myReader); ;
                    myReader.Close();
                    myCon.Close();
                }
            }

            return new JsonResult("Deleted Successfully");
        }
    }
}


我不确定这是否回答了我的问题,但谢谢你的帮助!您不需要创建新的模型类,您可以定义导航属性,如POST和Tags。感谢您编辑您的答案,因此只需在两个类中添加iCollection将生成一个包含两个外键的新表,我将如何处理控制器?我需要为新生成的表制作一个控制器吗?我不认为需要制作一个新控制器。我如何才能从多对多关系对新生成的表进行基本crud操作?我不确定这是否回答了我的问题,但感谢您的帮助!您不需要创建新的模型类,您可以定义导航属性,如POST和Tags。感谢您编辑您的答案,因此只需在两个类中添加iCollection将生成一个包含两个外键的新表,我将如何处理控制器?我需要为新生成的表制作一个控制器吗?我不认为需要制作一个新控制器。我如何才能在新生成的表上从多对多关系进行基本crud操作?
namespace WebAPI_C5.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class ConsultantController : ControllerBase
    {
        // to access the configuration from the app.settings file 
        // we need to make use of the dependency injection 
        private readonly IConfiguration _configuration;
        public ConsultantController(IConfiguration configuration)
        {
            _configuration = configuration;
        }
        // API method to get project details 
        [HttpGet]
        public JsonResult Get()
        {
            string query = @" select ConsultantId,ConsultantName from dbo.Consultant";
            DataTable table = new DataTable();
            string sqlDataSource = _configuration.GetConnectionString("ProjectAppCon");
            SqlDataReader myReader;
            using (SqlConnection myCon = new SqlConnection(sqlDataSource))
            {
                myCon.Open();
                using (SqlCommand myCommand = new SqlCommand(query, myCon))
                {
                    myReader = myCommand.ExecuteReader();
                    table.Load(myReader);
                    myReader.Close();
                    myCon.Close();
                }
            }
            return new JsonResult(table);
        }
        [HttpPost]
        public JsonResult Post(Consultant cons)
        {
            string query = @"
                    insert into dbo.Consultant values 
                    ('" + cons.ConsultantName + @"')
                    ";
            DataTable table = new DataTable();
            string sqlDataSource = _configuration.GetConnectionString("ProjectAppCon");
            SqlDataReader myReader;
            using (SqlConnection myCon = new SqlConnection(sqlDataSource))
            {
                myCon.Open();
                using (SqlCommand myCommand = new SqlCommand(query, myCon))
                {
                    myReader = myCommand.ExecuteReader();
                    table.Load(myReader); ;
                    myReader.Close();
                    myCon.Close();
                }
            }

            return new JsonResult("Added Successfully");
        }
        // to update data 
        [HttpPut]
        public JsonResult Put(Consultant cons)
        {
            string query = @"
                    update dbo.Consultant set 
                    ConsultantName = '" + cons.ConsultantName + @"'
                    where ConsultantId = " + cons.ConsultantId + @" 
                    ";
            DataTable table = new DataTable();
            string sqlDataSource = _configuration.GetConnectionString("ProjectAppCon");
            SqlDataReader myReader;
            using (SqlConnection myCon = new SqlConnection(sqlDataSource))
            {
                myCon.Open();
                using (SqlCommand myCommand = new SqlCommand(query, myCon))
                {
                    myReader = myCommand.ExecuteReader();
                    table.Load(myReader); ;

                    myReader.Close();
                    myCon.Close();
                }
            }

            return new JsonResult("Updated Successfully");
        }
        [HttpDelete("{id}")]
        public JsonResult Delete(int id)
        {
            string query = @"
                    delete from dbo.Consultant
                    where ConsultantId = " + id + @" 
                    ";
            DataTable table = new DataTable();
            string sqlDataSource = _configuration.GetConnectionString("ProjectAppCon");
            SqlDataReader myReader;
            using (SqlConnection myCon = new SqlConnection(sqlDataSource))
            {
                myCon.Open();
                using (SqlCommand myCommand = new SqlCommand(query, myCon))
                {
                    myReader = myCommand.ExecuteReader();
                    table.Load(myReader); ;
                    myReader.Close();
                    myCon.Close();
                }
            }

            return new JsonResult("Deleted Successfully");
        }
    }
}

public class Post
{
    public int PostId { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }

    public ICollection<Tag> Tags { get; set; }
}

public class Tag
{
    public string TagId { get; set; }

    public ICollection<Post> Posts { get; set; }
}

CREATE TABLE [Posts] (
    [PostId] int NOT NULL IDENTITY,
    [Title] nvarchar(max) NULL,
    [Content] nvarchar(max) NULL,
    CONSTRAINT [PK_Posts] PRIMARY KEY ([PostId])
);

CREATE TABLE [Tags] (
    [TagId] nvarchar(450) NOT NULL,
    CONSTRAINT [PK_Tags] PRIMARY KEY ([TagId])
);

CREATE TABLE [PostTag] (
    [PostsId] int NOT NULL,
    [TagsId] nvarchar(450) NOT NULL,
    CONSTRAINT [PK_PostTag] PRIMARY KEY ([PostsId], [TagsId]),
    CONSTRAINT [FK_PostTag_Posts_PostsId] FOREIGN KEY ([PostsId]) REFERENCES [Posts] ([PostId]) ON DELETE CASCADE,
    CONSTRAINT [FK_PostTag_Tags_TagsId] FOREIGN KEY ([TagsId]) REFERENCES [Tags] ([TagId]) ON DELETE CASCADE
);