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

时间:2021-01-11 14:31:03

系列目录:

【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项目

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

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

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

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

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

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,安装后不可用 。

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

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<MyDbContext> options) : base(options)
{
}
public DbSet<User> users { get; set; }
}

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

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

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

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

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

生成的Migration迁移文件

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

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

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

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

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";
}
}

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

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

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

7 配置swagger

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

下载此包 Swashbuckle.AspNetCore

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

将 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", "接口文档");
});

修改接口代码

     /// <summary>
/// 添加用户
/// </summary>
/// <param name="user">用户实体</param>
/// <returns></returns>
[HttpPost]
public async Task<string> Add(User user)
{
await _db.Set<User>().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文档,接口信息成功显示

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

8. wagger显示接口注释

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

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

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

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

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

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

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

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

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

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

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

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