创建实体类,这里会自动生成构造函数,但是不会生成tostring
cs
namespace WebApplication1.Products
{
public class Product
{
public string productId { get; set; }
public string productName { get; set; }
public override string ToString()
{
return $"{nameof(productId)}: {productId}, {nameof(productName)}: {productName}";
}
}
}
创建连接数据库类
cs
using Microsoft.EntityFrameworkCore;
using WebApplication1.Products;
namespace WebApplication1.Data
{
public class AppDbContext : DbContext
{
// 构造函数,用于接收配置
public AppDbContext(DbContextOptions<AppDbContext> options) : base(options)
{
}
// DbSet 代表数据库中的一张表,后续的CRUD操作都基于它
public DbSet<Product> Todos { get; set; }
}
}
webApi 控制层,
入口文件main方法中向依赖注入容器注册 AppDbContext
cs
builder.Services.AddDbContext<AppDbContext>(options =>
options.UseMySql(
builder.Configuration.GetConnectionString("DefaultConnection"),
new MySqlServerVersion(new Version(8, 0, 33)) // 根据你的 MySQL 版本调整
));
ToList();执行sql并存储到List
cs
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using WebApplication1.Data;
using WebApplication1.Products;
namespace WebApplication1.TodosController
{
[Route("api/")]
[ApiController]
public class ValuesController : ControllerBase
{
private readonly AppDbContext appdbs;
// 构造函数,自动注入SQL连接的基本数据
public ValuesController(AppDbContext appdb)
{
this.appdbs = appdb;
}
[Route("getProduct")]
[HttpGet]
public List<Product> GetProduct([FromQuery]Product product)
{
Console.WriteLine(product);
var todos = appdbs.Todos.FromSqlRaw("select productId,productName From product where productId ={0}", "PRO258Q00004").ToList();
return todos;
}
}
}
CRUD
cs
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System.Reflection.Metadata.Ecma335;
using WebApplication1.Data;
using WebApplication1.Products;
namespace WebApplication1.TodosController
{
[Route("api/")]
[ApiController]
public class ValuesController : ControllerBase
{
private readonly AppDbContext appdbs;
// 构造函数,自动注入SQL连接的基本数据
public ValuesController(AppDbContext appdb)
{
this.appdbs = appdb;
}
[Route("getProduct")]
[HttpGet]
public async Task<List<Product>> GetProduct([FromQuery]Product product)
{
var todos = await appdbs.Todos.FromSqlRaw("select productId,productName From product").ToListAsync();
return todos;
}
[Route("add")]
[HttpPost]
public IActionResult Insert([FromBody] Product product)
{
int todos = appdbs.Database.ExecuteSqlRaw("insert into product(productName)values({0})", product.productName);
return StatusCode(200,"插入成功");
}
[Route("update")]
[HttpPut]
public IActionResult Update([FromBody] Product product)
{
int rowsAffected = appdbs.Database.ExecuteSqlRaw(
"UPDATE product SET productName = {0} WHERE productId = {1}",
product.productName, product.productId
);
if (rowsAffected > 0) {
return StatusCode(200,"修改成功");
}
return StatusCode(500,"修改失败") ;
}
[Route("delete")]
[HttpDelete]
public IActionResult Delete([FromQuery] string productId)
{
int rowsAffected = appdbs.Database.ExecuteSqlRaw(
"DELETE FROM product WHERE productId = {0}",
productId
);
return StatusCode(200,"删除成功");
}
}
}
所需要的依赖包,以及安装依赖

修改默认端口

cs
"Kestrel": {
"Endpoints": {
"Https": {
"Url": "https://*:9601"
},
"Http": {
"Url": "http://*:9600"
}
}
}

接收参数注解
