【Docker】 .Net Core 3.1 webapi 集成EF Code First,使用MySql进行业务操作 、配置swagger (三)
阅读原文时间:2022年05月17日阅读:1

系列目录:

【Docker】 CentOS7 安装 Docker 及其使用方法 ( 一 )

【Docker】 使用Docker 在阿里云 Centos7 部署 MySQL 和 Redis (二)

【Docker】 .Net Core 3.1 webapi 集成EF Code First,使用MySql进行业务操作 、配置swagger (三)

…….持续不定期更新中

之前一直用.Net Core 2.1 ,发现3.1后有很多地方和原来的操作不同,踩了一些坑,所以记录一下3.1的操作方法

1.开发环境

.Net Core 3.1

MySql : 5.7.32

2.创建webapi项目

3.查看项目结构,新建ValuesController ,运行项目,打开浏览器访问项目地址 XXX/api/Values

\[Route("api/\[controller\]")\]  
\[ApiController\]  
public class ValuesController : ControllerBase  
{  
    \[HttpGet\]  
    public string Get()  
    {  
        return "value";  
    }  
}

4.集成EntityFramework,打开Nuget,安装EntityFramework的包

下载如下包:

Pomelo.EntityFrameworkCore.MySql      此包用于集成EF,进行增删改查等操作

Microsoft.EntityFrameworkCore.Tools     此包是EF工具包,没有不可以使用数据迁移更新数据库

P.S : MySql.Data.XXX   等Mysql官方包不可用 最新版8.0.22 目前不支持.Net Core 3.1,安装后不可用 。

appsetting.json文件添加数据库连接

"ConnectionStrings": {
"conn": "Data Source=localhost;Database=test;User ID=root;Password=sima1234;port=3306;sslmode=none;"
},

添加数据库DbContext类

public class MyDbContext : DbContext
{
public MyDbContext(DbContextOptions options) : base(options)
{
}
public DbSet users { get; set; }
}

打开startup.cs,把db对象注入一下,方便Controller层使用,再改造一下Controller,把路径改成自定义。

services.AddScoped(); //注入一下db对象
services.AddDbContext(options => options.UseMySql(Configuration.GetConnectionString("conn")));

5.打开程序包管理控制台,使用Code First创建数据库

add-Migration init \\ init是名字 随便自己取名字 如果有错可以用 Remove-Migration 回退
update-database \\ 上一步成功后更新数据库

生成的Migration迁移文件

打开数据库查看,user成功创建,另外那张表是ef数据迁移版本记录表

6.修改Controller层代码,自定义访问路径

\[Route("/\[controller\]/\[action\]")\]  
\[ApiController\]  
public class ValuesController : ControllerBase  
{  
    private DbContext \_db;  
    public ValuesController(MyDbContext db)  
    {  
        this.\_db = db;  
    }

    \[HttpGet\]  
    public async Task<string> Add()  
    {  
        User user = new User();  
        user.Username = "admin";  
        user.Password = "123456";  
        await \_db.Set<User>().AddAsync(user);  
        await \_db.SaveChangesAsync();  
        return "value";  
    }  
}

运行结果,注意!访问地址已经为自己定义的了。

7 配置swagger

配置swagger 用于自动生成接口文档,给前端同事查看。

下载此包 Swashbuckle.AspNetCore

将 Swagger 生成器添加到 Startup.ConfigureServices 方法中的服务集合中:

P.S: .Net Core 3.1之后的版本  不用使用 new Info 要用 new OpenApiInfo

// 注册Swagger,定义一个和多个文档
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });
});

在 Startup.Configure 方法中,启用中间件为生成 Swagger。

// 启用中间件服务生成Swagger
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "接口文档");
});

修改接口代码

     ///

/// 添加用户 ///
/// 用户实体
///
[HttpPost]
public async Task Add(User user)
{
await _db.Set().AddAsync(user);
await _db.SaveChangesAsync();
return "value";
}

    /// <summary>  
    /// 获取所有用户  
    /// </summary>  
    /// <returns>所有用户</returns>  
    \[HttpGet\]  
    public async Task<List<User>> GetList()  
    {  
        var list = await \_db.Set<User>().ToListAsync();  
        return list;  
    }

打开网站 访问   XXXX/swagger/inedx.html 访问Swagger文档,接口信息成功显示

8. wagger显示接口注释

右键点击项目-属性-生成,输出xml文档文件,打钩,用于swagger调用显示注释。

打断点查看具体生成地址,此xml文件生成在这里

运行项目,查看,已经有了注释

9. 关闭需要输入注释的警告

项目中有些不想输入注释的地方也会提示要求输入注释!很烦 !

右键点击项目-属性,取消显示警告,添加1591

添加后重新运行项目,问题解决。