首页 > 数据库 >.net core WebAPI 初探及连接MySQL

.net core WebAPI 初探及连接MySQL

时间:2023-06-07 11:01:59浏览次数:47  
标签:WebAPI core Models 数据库 CoreDbContext coreDbContext MySQL using public

1. 前言

笔者最近跟着微软官方文档学习.net core WebAPI,但发现其对 WebAPI 连接数据库、读取数据库方面讲得不够细致明了。写此文的目的,即实现 .net core WebAPI 的 GET、POST 方法访问数据库,并输出结果。

2. 开发准备

2.1 操作系统

Windows 10 / Windows 7

2.2 .net core sdk

.net core 2.2

下载地址:https://dotnet.microsoft.com/download

2.3 开发工具

Visual Studio 2017

3. 创建 .net core WebAPI 项目

用 Visul Studio 2017 新建项目,在出现的对话框中选择 .NET Core -> ASP.NET Core Web 应用程序,并输入项目名称。

.net core WebAPI 初探及连接MySQL_.net

 单击【确定】后,在出现的对话框中选择【API】,注意不要勾选【启用Docker支持】,身份验证方式为【不进行身份验证】,然后单击【确定】。

.net core WebAPI 初探及连接MySQL_实体类_02

 之后生成了相应的模板项目,如下图所示。

.net core WebAPI 初探及连接MySQL_.net_03

从图中可以看到,默认的项目文件中已经包含了 Controllers。其为控制器文件夹,用来进行业务编写的代码,我们基本上需要在这个文件中进行数据的传出与接收。相应的,我们还可以进行各个文件创建,进行层次区分,也可以建立单独的类项目,进行层次区分,如控制层,服务业务层,数据连接层,模型实体层。

另外,

appsettings:配置文件,此处可以编写一些常量设置,然后在程序中进行读取。

Program:项目启动文件。

Startup:项目配置设置文件。

4. 连接数据库

4.1 连接 MySQL 数据库

首先,利用 Visul Studio 2017 中的 nuget 安装 MySql.Data.EntityFrameworkCore,输入如下命令。

Install-Package MySql.Data.EntityFrameworkCore -Version 8.0.15

也可以参照 https://www.nuget.org/packages/MySql.Data.EntityFrameworkCore 中其它方法。其它数据库提供程序可参照 https://docs.microsoft.com/zh-cn/ef/core/providers/index

.net core WebAPI 初探及连接MySQL_.net_04

安装成功后可以在依赖项中看到 MySql.Data.EntityFrameworkCore

.net core WebAPI 初探及连接MySQL_System_05

接下来创建一个数据表结构,并添入示例数据,例如下图。

.net core WebAPI 初探及连接MySQL_System_06

.net core WebAPI 初探及连接MySQL_实体类_07

 

C#中创建对应的实体类,另外创建一个类继承dbContext,dbContext是EF框架中非常重要的一个环节,是建立实体类与数据库连接的桥梁,具体的原理,这里不进行赘述。

创建过程如下代码所示(注意要自行在项目中添加 Models 文件夹,并添加实体类文件,如 Person.cs)。

Models/Person.cs

using System.ComponentModel.DataAnnotations;

namespace WebApi.Models
{
    public class Person
    {
        [Key]
        public int Id { get; set; }
        [MaxLength(20)]
        public string Name { get; set; }
        [MaxLength(3)]
        public int Age { get; set; }
    }
}

 

Models/CoreDbContext.cs

using Microsoft.EntityFrameworkCore;namespace WebApi.Models
{
    public class CoreDbContext : DbContext
    {
        public virtual DbSet<Person> Person { get; set; } //创建实体类添加Context中

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            if (!optionsBuilder.IsConfigured)
            {
                optionsBuilder.UseMySQL(@"server=localhost;uid=YourUserId;pwd=YourPassword;
                    port=3306;database=DbName;sslmode=Preferred;");
            }
        }
    }
}

.net core WebAPI 初探及连接MySQL_.net_08

 

 下面改写 ValuesController.cs 中相关代码,以测试 GET 方法。

Controllers/ValuesController.cs

using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.Linq;
using WebApi.Models;

namespace WebApi.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class ValuesController : ControllerBase
    {
        // GET api/values
        [HttpGet]
        public List<Person> Get()
        {
            using (CoreDbContext _coreDbContext = new CoreDbContext())
            {
                return _coreDbContext.Set<Person>().ToList();
            }
        }
        ......
   }
}

调试运行结果如下

.net core WebAPI 初探及连接MySQL_System_09

表示数据库已经连接成功,并以 GET 方法取得数据。

4.2 连接数据库的写法改进

针对上述的连接属性的情况来看,我们不应该把连接的属性编写在代码中,因此我们要设计一下,把连接的属性编写在配置文件中,对appsettings.json,Startup.cs,CoreDbContext.cs进行相关的配置,如下所示。

appsettings.json

{
    "ConnectionStrings": {
        "DefaultConnection": "server=localhost;uid=YourUserId;pwd=YourPassword;port=3306;database=DbName;sslmode=Preferred;"
    },
    "Logging": {
        "LogLevel": {
            "Default": "Warning"
        }
    },
    "AllowedHosts": "*"
}

Startup.cs

// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
       //连接 mysql 数据库,添加数据库上下文
       services.AddDbContext<CoreDbContext>(options => 
      options.UseMySQL(Configuration.GetConnectionString("DefaultConnection")));

       services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}

CoreDbContext.cs

using Microsoft.EntityFrameworkCore;

namespace WebApi.Models
{
    public class CoreDbContext : DbContext
    {
        public virtual DbSet<Person> Person { get; set; } //创建实体类添加Context中

        public CoreDbContext(DbContextOptions<CoreDbContext> options) : base(options)
        {

        }
    }
}

上述代码高亮部分就是要修改或添加的内容,这时其实是已经把coreDbContext注入到容器中进行操作,而容器中对Context的注入方式为瞬时注入,因此后面要用到依赖注入的时候,很多时候,在数据层使用context的时候需要把对应的注入都设计为瞬时注入的形式,此处就不进行过多的提及。

我们在进行测试一下,这下我们就不用自己进行context的new操作,由于我们一开始进行设置的时候就已经进行了依赖注入的形式,不过,.netCore中只有构造注入,没有属性注入,因此我们就用构造注入的方式进行,如下所示。

Controllers/ValuesController.cs

 

using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.Linq;
using WebApi.Models;

namespace WebApi.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class ValuesController : ControllerBase
    {
        private readonly CoreDbContext _coreDbContext;

        public ValuesController(CoreDbContext coreDbContext)
        {
            _coreDbContext = coreDbContext;
        }
        
        // GET api/values
        [HttpGet]
        public List<Person> Get()
        {
            return _coreDbContext.Set<Person>().ToList();
        }
        ......
   }
}

 

至此写法改进完成。

4.3 关于 post 方法

在 Controllers/ValuesController.cs 中将模板文件的 Post 方法替换为

// POST api/values
[HttpPost]
public List<Person> Post()
{
    return _coreDbContext.Set<Person>().ToList();
}

发布API后(搭建及发布过程此处不做讲解),用 Postman 测试。由下图可以看到获取了返回值。

.net core WebAPI 初探及连接MySQL_.net_10

 

 【参考】开源中国:.netCore搭建WebAPI,以及MySQL,SQL server数据库连接方式



标签:WebAPI,core,Models,数据库,CoreDbContext,coreDbContext,MySQL,using,public
From: https://blog.51cto.com/u_4018548/6430391

相关文章

  • MySQL HA 方案 MMM、MHA、MGR、PXC 对比
    ySQL高可用架构MMM(MultiMasterReplicationManager)   资源数量说明主DB2用于主备模式的主主复制从DB0~N台可以根据需要配置N台从服务器IP地址2n+1N为MySQL服务器的数量监控用户1用户监控数据库状态的MySQL用户(replication)代理用户1......
  • MySQL安装及配置
    MySQL安装及配置环境。1.软件下载:本人学习使用的版本是MySQL5.7.19(目前最稳定的)下载地址:https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.19-winx64.zip2.添加环境变量:电脑-属性-高级系统设置-环境变量3.手动创建初始化ini文件:在MySQL目录下创建my.ini文件......
  • MySQL-变化数据捕获(CDC)
    MySQLCDC(ChangeDataCapture),中文名为MySQL变化数据捕获,是一种截取MySQL主从复制流中binlog的技术,从而实时捕获数据库中的增、删、改操作。在大数据、实时计算、数据集成等领域都有广泛应用。本文将从多个方面对MySQLCDC做详细阐述,让你全面了解其背后的原理和应用场景。一、......
  • 4月22日严老师MySQL面试资料
    Mysql面试突击班2讲师:严镇涛1.什么是数据库的事务?下单接口订单表资金表物流表老公:15000-14500=500500-145000-14500老婆:2000+14500=165002000insert+20002000014500+2000=16500事务的定义维基百科的定义:事务是数据库管理系统(DBMS)执行过程中的一个逻辑单......
  • MySQL日志维护与监控脚本
    MySQL数据库的管理维护过程中,MySQL错误日志(MySQLErrorLog)与MySQL慢查询日志(MySQLSlowLog),一般不会自动清理,也不会轮转/切换,这个跟MySQL的二进制日志(binlog)有所不同,所以如果数据库管理员对其不维护的话,这些日志随着时间的推移以及一些特殊原因,一方面日志文件可能会变得非......
  • 如何彻底卸载MySQL 并重装
    一、关闭MySQL服务(1)鼠标右击此电脑-->点击管理 (2)打开“计算机管理”界面,点击“服务和应用程序”-->服务-->MySQL;鼠标右键点击MySQL,点击停止。 二、卸载mysql软件打开【控制面板】,选择【程序和功能】,卸载Mysql相关的软件包。 三、删除MySQL安装目录下相关......
  • 在 MySQL 中,可以通过将插入操作放在事务中并使用 ROLLBACK 语句实现出现异常时全部回
    在MySQL中,可以通过将插入操作放在事务中并使用ROLLBACK语句实现出现异常时全部回滚。示例如下:STARTTRANSACTION;--开始事务INSERTINTOtable_name(column1,column2,...)VALUES(value1,value2,...);INSERTINTOtable_name(column1,column2,...)VALUES(val......
  • net core-Scheduling Background Jobs With Quartz
    一安装包Install-PackageQuartz.Extensions.Hosting二注入依赖关系services.AddQuartz(configure=>{configure.UseMicrosoftDependencyInjectionJobFactory();});services.AddQuartzHostedService(options=>{options.WaitForJobsToComplete=true;});......
  • MySQL存储引擎
    一:存储引擎概念存储引擎其实就是对于数据库文件的一种存取机制,如何实现存储数据,如何为存储的数据建立索引以及如何更新,查询数据等技术实现的方法。MySQL中的数据用各种不同的方式存储在文件(或内存)中,每一种存储的方式都使用不同的存储机制,索引技巧等,最终提供广泛的不同功能和......
  • RDS 、HDFS、 mapreduce 、spark 、hive、 hbase 、zookeeper 、kafka 、flume、mysql
    这些技术是大数据领域的常用组件,它们之间的配置文件依赖关系如下:RDS是一种关系型数据库,可以独立安装和使用,不需要依赖其他组件。HDFS是Hadoop分布式文件系统,通常与MapReduce一起使用。在Hadoop集群中,HDFS需要配置core-site.xml和hdfs-site.xml两个文件,其中core-site......