首页 > 编程语言 >08使用EFCore进行增删改查 - ASP.NET Core WebAPI

08使用EFCore进行增删改查 - ASP.NET Core WebAPI

时间:2025-01-21 21:27:43浏览次数:3  
标签:WebAPI Core ASP TypeFilter shirt db id public Shirt

文章目录


一、如何在控制器中使用EFCore

1.注册服务

在program.cs文件中添加以下代码。

builder.Services.AddDbContext<ApplicationDbContext>(options =>
{
	options.UseSqlServer(builder.Configuration.GetConnectionString("ShirtStoreManagement"));
});

2.获取db对象

在控制器类的构造函数中获取ApplicationDbContext对象,因为已经从注册服务的方法就新建了ApplicationDbContext对象实例。

private readonly ApplicationDbContext db;
public ShirtController(ApplicationDbContext db) 
{
    this.db = db;
}

3.使用db对象进行crud

使用db对象直接进行数据库交互操作。

[ApiController]
[Route("api/[controller]")]
public class ShirtController : ControllerBase
{
    private readonly ApplicationDbContext db;
    public ShirtController(ApplicationDbContext db) 
    {
        this.db = db;
    }

    [HttpGet]
    public IActionResult GetShirts()
    {
        return Ok(db.Shirts.ToList());
    }

    [HttpGet("{id}")]
    [TypeFilter(typeof(Shirt_ValidateShirtIdFilterAttribute))] // 使用TypeFilter目的:执行构造函数,将db传入到对应类中
    public IActionResult GetShirtById(int id)
    {
        return Ok(HttpContext.Items["shirt"]);
    }

    [HttpPost]
    [TypeFilter(typeof(Shirt_ValidateCreateShirtFilterAttribute))]
    public IActionResult CreateShirt([FromBody] Shirt shirt)
    {
        db.Shirts.Add(shirt);
        db.SaveChanges();

        // 在请求返回的header的location会体现(第一个参数是动作名,第二个是路由参数,第三个是返回数据)
        return CreatedAtAction(nameof(GetShirtById), new { id = shirt.ShirtId }, shirt);
    }

    [HttpPut("{id}")]
    [TypeFilter(typeof(Shirt_ValidateShirtIdFilterAttribute))] 
    [Shirt_ValidateUpdateShirtFilter]
    [TypeFilter(typeof(Shirt_HandleUpdateExceptionsFilterAttribute))]
    public IActionResult UpdateShirt(int id, Shirt shirt)
    {
   
        var shirtToUpdate = HttpContext.Items["shirt"] as Shirt;
        shirtToUpdate.Brand = shirt.Brand;
        shirtToUpdate.Gender = shirt.Gender;
        shirtToUpdate.Color = shirt.Color;
        shirtToUpdate.Size = shirt.Size;
        shirtToUpdate.Price = shirt.Price;

        db.Shirts.Update(shirtToUpdate);
        db.SaveChanges();

        return NoContent();
    }

    [HttpDelete("{id}")]
    [TypeFilter(typeof(Shirt_ValidateShirtIdFilterAttribute))]
    public IActionResult DeleteShirt(int id)
    {
        var shirtToDelete = HttpContext.Items["shirt"] as Shirt;
        db.Shirts.Remove(shirtToDelete);
        db.SaveChanges();
        return Ok(shirtToDelete);
    }
}

二、如何在筛选器中使用EFCore

1.与控制器类中同样操作

注册服务->获取db对象->使用db对象

2.注意事项

获取db对象时,同样时写在筛选器类的构造函数中。使用该筛选器类时,应使用TypeFilter进行特性标注。例如:[TypeFilter(typeof(Shirt_ValidateShirtIdFilterAttribute))]。这样才会执行筛选器类的构造函数,将db传入到对应筛选器类中。

[HttpGet("{id}")]
[TypeFilter(typeof(Shirt_ValidateShirtIdFilterAttribute))] // 使用TypeFilter目的:执行构造函数,将db传入到对应类中
public IActionResult GetShirtById(int id)
{
    return Ok(HttpContext.Items["shirt"]);
}

标签:WebAPI,Core,ASP,TypeFilter,shirt,db,id,public,Shirt
From: https://blog.csdn.net/weixin_44458540/article/details/145284720

相关文章

  • .NET Core 中如何构建一个弹性的 HTTP 请求机制?
    1.理解弹性HTTP请求机制什么是弹性?弹性是指系统在面对故障或异常情况时,能够保持或快速恢复到正常状态的能力。在HTTP请求的上下文中,弹性意味着当请求失败时,系统能够自动采取一系列措施(如重试、降级、断路等)来确保请求最终成功或优雅地处理失败。为什么需要弹性HTTP请求......
  • DevExpress ASP.NET Web Forms v24.2 最新版本系统环境配置要求
    本文档包含有关安装和使用 DevExpressASP.NETWebForms控件的系统要求的信息。点击获取DevExpressv24.2正式版.NETFrameworkDevExpressASP.NETWebForms控件支持以下.NET框架版本。如果您需要DevExpress产品的早期版本,请咨询“在线客服”获取。IDEDevExpressASP.......
  • 使用scorecardpy库计算woe分箱和iv值
    woe分箱_iv值计算基于scorecardpy库,乳腺癌数据集importpandasaspdimportnumpyasnpfromsklearn.datasetsimportload_breast_cancerimportscorecardpyasscfromtqdmimportnotebookcancer=load_breast_cancer()df=pd.DataFrame(cancer.data,column......
  • CudaSPONGE与PySAGES初步性能测试
    技术背景在前面的一篇博客中,我们介绍过CudaSPONGE的基础使用方法、CudaSPONGE调用Python接口函数以及CudaSPONGE结合增强采样软件PySAGES的使用方法。在这篇文章中,我们将介绍CudaSPONGE和PySAGES相结合的初步性能测试结果。测试案例我们沿用这一篇文章中的测试案例,对一个简......
  • C#/.NET/.NET Core技术前沿周刊 | 第 22 期(2025年1.13-1.19)
    前言C#/.NET/.NETCore技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NETCore领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。欢迎投稿、推荐或自荐优质文章、项目、学习资源等。......
  • 如何在ASP页面中根据用户代理判断并跳转到移动设备页面?
    在ASP页面中,通过检查HTTP_USER_AGENT字符串可以有效地判断客户端浏览器是否为移动设备,并进行相应的页面跳转。这有助于提供更好的用户体验,确保移动端用户能够访问优化后的移动页面。以下是实现该功能的详细步骤和代码示例:获取HTTP_USER_AGENT:使用Request.ServerVariables("HTT......
  • 如何在ASP页面中实现移动端与PC端的自动跳转?
    在ASP页面中,可以通过检查HTTP_USER_AGENT字符串来判断客户端浏览器是否为移动设备,并根据结果进行相应的页面跳转。以下是详细的实现步骤和代码示例:检查HTTP_USER_AGENT字符串:HTTP_USER_AGENT是服务器接收到的请求头信息之一,包含了客户端浏览器的信息。通过InStr函数查找该字......
  • 【详解】JavaSpringMVC+MyBitis+多数据源切换
    目录JavaSpringMVC+MyBatis+多数据源切换1.环境准备2.添加依赖3.配置多数据源4.创建数据源配置类5.动态数据源切换5.1动态数据源类5.2数据源上下文持有者5.3切面管理数据源选择5.4自定义注解6.使用示例6.1UserMapper6.2OrderMapper6.3Service......
  • ASP.NET Core MVC的Areas使用整理
    一、ASP.NETCoreMVC区域Areas定义区域是一项MVC功能,用于将相关功能作为一个单独的组组织到一个组中:控制器操作的路由命名空间。视图的文件夹结构。通过使用区域,应用可以有多个名称相同的控制器,只要它们具有不同的区域。通过向controller和action添加另一个路由参......
  • 在 .NET Core中如何使用 Redis 创建分布式锁
    在.NETCoreWebApi中使用Redis创建分布式锁可以通过StackExchange.Redis库来实现。分布式锁用于确保在分布式系统中,同一时间只有一个进程可以执行某段代码。1.场景描述在支付系统中,可能会出现以下并发问题:用户同时发起多次支付请求,导致重复扣款。多个请求同时处理同......