C# 0717 利用Postman对数据库进行基础操作

1. 利用PowerDesigner进行数据库设计

        1.1 确定表名

        1.2 设计字段名和类型

        1.3 得到PowerDesigner自动生成的数据库语句

2.构建相关的数据库 

          2.1 创建一个新的数据库

        切换到刚才创建的数据库,新建查询,将PowerDesigner自动生成的数据库语句复制过来,执行就创建了一个新表

        为表添加一行新的数据

        添加的数据必须符合字段名对应的类型,不符合的话就会报错

3. 在C#中创建MVC分层 

4.下载依赖包

成功后会可以看到下面的内容

5. 连接数据库 

在appsettings.json中的"AllowedHosts": "*",下添加

 "AllowedHosts": "*",
 "ConnectionStrings": {
   "DefaultConnection": "Server=(local)\\SQLEXPRESS;Database=需要连接的数据库名;User Id=用户账号;Password=用户密码; TrustServerCertificate=True;"
 }

在Program.cs中的var builder = WebApplication.CreateBuilder(args);下添加

var builder = WebApplication.CreateBuilder(args);

//注册数据库的数据
builder.Services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));

6. 配置Models 

        6.1 在Models 中创建一个类

        6.2 将数据库中的表结构映射到C#的Menu.cs类上

注:Menu.cs中用的类型必须和数据库中的类型相互匹配

using System.ComponentModel.DataAnnotations.Schema;

namespace WebApplicationKFC.Models
{
    [Table("tb_menus")]//实体和数据库表进行映射
    public class Menu
    {
        [Column("menu_id")]//指定属性MenuId映射到数据库表中的menu_id列
        public long MenuId { get; set; }//定义了一个长整型属性MenuId,用于存储菜单的唯一标识符,通常作为主键。
        [Column("restaurant_id")]
        public long? RestaurantId { get; set; }//类型后面跟着的?符号表示该类型是一个可空类型(Nullable Type)
        [Column("name")]
        public string? Name { get; set; }
        [Column("price")]
        public decimal? Price { get; set; }
        [Column("type")]
        public string? Type { get; set; }
        [Column("sales_volume")]
        public int SalesVolume { get; set; }
    }
}

7. 新建一个文件夹,里面存放 ApplicationDbContext

ApplicationDbContext类是整个应用程序与数据库交互的中心点,通过这个类,你可以配置数据库连接、定义数据库中的表以及执行数据库操作。

        7.1创建文件夹

创建ApplicationDbContext

        7.2 配置ApplicationDbContext

using Microsoft.EntityFrameworkCore;
using WebApplicationKFC.Models;

namespace WebApplicationKFC.Date
{
    public class ApplicationDbContext : DbContext
    //定义了一个名为ApplicationDbContext的类,它继承自DbContext。
    //DbContext是EF Core的核心类,负责与数据库交互,包括数据库连接的管理、数据库迁移以及对数据库查询的追踪等。
    {
        public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
            //这是ApplicationDbContext的构造函数,它接受一个DbContextOptions<ApplicationDbContext>类型的参数。
            //这个参数用于配置数据库连接字符串和其他数据库相关设置。
            //通过依赖注入(Dependency Injection, DI)机制,ASP.NET Core会自动提供这些选项。
            : base(options)
            //调用基类DbContext的构造函数,传入前面提到的options,初始化数据库上下文。
        {

        }
        public DbSet<Menu> Menus { get; set; }
        //定义了数据库中的表(集合)——Menus,它与Menu实体类相对应。
        //DbSet<T>是EF Core中表示数据库表的类型,T是实体类的类型。这些属性允许你通过LINQ查询等方式操作数据库中的数据。

    }
}
   

 8. 配置Controllers

        8.1 在Controllers新建一个MenuController.cs控制器

        8.2 配置MenuController.cs控制器

using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using WebApplicationKFC.Date;
using WebApplicationKFC.Models;

namespace WebApplicationKFC.Controllers
{
    [ApiController]
    [Route("/api/[controller]")]//定义了控制器的基本路由前缀为/api/Menu,其中[controller]会被替换为控制器名(即"Menu")。
    public class MenuController : ControllerBase
    {
        private readonly ApplicationDbContext _context;
        //context是一个只读的ApplicationDbContext实例,用于与数据库交互。
        //通过构造函数依赖注入(Dependency Injection)初始化,确保了实例可以在控制器的生命周期内安全地被多个操作方法使用。

        //构造方法来实现DI 系统会自动注入,注入数据库上下文的对象
        public MenuController(ApplicationDbContext context) //方法参数,局部变量
        {
            _context = context;
        }
    }
}

        8.3 获取数据库的所有数据

[HttpGet]
public async Task<ActionResult> List()
//List()方法响应HTTP GET请求,异步获取所有菜单项并返回JSON格式的数据
{
    var menuList = await _context.Menus.ToListAsync();
    //_context是之前通过构造函数注入的ApplicationDbContext实例,它是Entity Framework Core用于与数据库交互的核心对象。
    //Menus是ApplicationDbContext中的一个DbSet<Menu>属性,代表数据库中的Menus表。
    //ToListAsync()方法是一个异步操作,它会查询Menus表中的所有记录,并将结果转换为一个列表(List)。
    //await关键字用于等待这个异步操作完成,之后将结果赋值给menuList变量。
    return Ok(menuList);
    //使用Ok方法将结果封装进一个HTTP响应中,表示请求成功并携带数据。
    //menuList作为数据体,会被自动序列化为JSON格式(默认行为,可通过配置修改),然后随着HTTP响应一起返回给客户端。
    //这里的Ok是Microsoft.AspNetCore.Mvc.ControllerBase类中的一个方法,用于生成HTTP状态码200的响应,表示一切正常。
}

结果:

测试:

打开Postman,新建一个集合

        8.4 获取数据库的单一数据

[HttpGet("{MenuId}")]
public async Task<ActionResult> GetByID(long MenuId)
//GetByID(long MenuId)方法根据提供的MenuId查询单个菜单项,如果不存在则返回400 Bad Request状态码。
{
    //查询,判断是否为空
    var menu = await _context.Menus.FindAsync(MenuId);
    //FindAsync(MenuId)方法异步查询数据库中具有指定MenuId的菜单项

    if (menu == null)
    {
        return BadRequest();
        //如果menu为null,表示没有找到对应ID的菜单项,方法将返回一个HTTP 400 Bad Request响应,告诉客户端请求的参数无效或资源未找到
    }
    return Ok(menu);
}

结果:

测试:

        8.5 为数据库新增一行数据

//新增,参数实体前台传递json过来,EF自动封装
[HttpPost]
public async Task Add([FromBody] Menu menu)
//Add([FromBody] Menu menu)方法处理新建菜单项的POST请求,从请求体中接收JSON数据并将其添加到数据库中。
{
    _context.Menus.Add(menu);
    await _context.SaveChangesAsync();
    //行一个异步操作来保存所有挂起的数据库更改,包括添加的新菜单项。
    //SaveChangesAsync方法会将变更发送到数据库,并执行必要的SQL命令来插入新记录
}

结果:

        8.6 修改数据库中的数据

//修改
[HttpPut]
public async Task Update([FromBody] Menu menu)
//Udate([FromBody] Menu menu)方法用于更新菜单项,接收请求体中的菜单数据并更新数据库记录。
{
    _context.Menus.Update(menu);
    await _context.SaveChangesAsync();
}

结果:

        8.7 删除数据库中的数据

//删除一条
[HttpDelete("{MenuId}")]
public async Task Delete(long MenuId)
//Delete(long MenuId)方法根据提供的ID删除菜单项,先查询该记录,存在则执行删除操作。
{
    //根据id查询实体
    var menu = await _context.Menus.FindAsync(MenuId);
    if (menu != null)
    {
        _context.Menus.Remove(menu);//API这个只是登记,没有真正操作
        await _context.SaveChangesAsync();//提交
    }
}

结果:

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值