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