net6 项目搭建及引用框架记录(log4net,autofac,exception,api result,jwt,efcore)七、引入efcore

首先准备好数据库,我用的是阿里云的mysql数据库,准备好相关的数据库连接和用户名密码

vs2022中引入efcore,需要添加vs2022的扩展

net6 项目搭建及引用框架记录(log4net,autofac,exception,api result,jwt,efcore)七、引入efcore_第1张图片

在appsetting.json中写入连接字符串。

 

注意两个问题:一是,server一定是阿里云提供的外网连接地址。二是,要在rds安全中添加本地外网的IP地址到白名单,否则无法连接成功。

下面通过Nuget安装mysql和ef的包

net6 项目搭建及引用框架记录(log4net,autofac,exception,api result,jwt,efcore)七、引入efcore_第2张图片

net6 项目搭建及引用框架记录(log4net,autofac,exception,api result,jwt,efcore)七、引入efcore_第3张图片 

注意哈:vs2022连接mysql,oracle公司的插件基本都已经弃用了,微软推荐了pomelo的这一个

我的数据库已经建立好,我实现的是传统的Modelfist

首先在model项目上点右键,在出现的菜单上点击EF Core工具,再点击反向工程

 net6 项目搭建及引用框架记录(log4net,autofac,exception,api result,jwt,efcore)七、引入efcore_第4张图片

 net6 项目搭建及引用框架记录(log4net,autofac,exception,api result,jwt,efcore)七、引入efcore_第5张图片

net6 项目搭建及引用框架记录(log4net,autofac,exception,api result,jwt,efcore)七、引入efcore_第6张图片 

net6 项目搭建及引用框架记录(log4net,autofac,exception,api result,jwt,efcore)七、引入efcore_第7张图片 

 net6 项目搭建及引用框架记录(log4net,autofac,exception,api result,jwt,efcore)七、引入efcore_第8张图片

 

注意注意:在点击确定前一定要保证数据库连接是正常的,要用mysql的工具去测试一下,否则点击确定后会没有反应。

会在输出栏中看到以下报错信息

net6 项目搭建及引用框架记录(log4net,autofac,exception,api result,jwt,efcore)七、引入efcore_第9张图片

如果正常的话,那么你点击确定会看到以下画面。假如你看不到,也可以尝试去安装

mysql-installer-community

net6 项目搭建及引用框架记录(log4net,autofac,exception,api result,jwt,efcore)七、引入efcore_第10张图片

 我勾选了这些内容。具体使用哪些根据自己的习惯和业务需要

net6 项目搭建及引用框架记录(log4net,autofac,exception,api result,jwt,efcore)七、引入efcore_第11张图片

 勾选完成后点击确定

系统生成model文件

 net6 项目搭建及引用框架记录(log4net,autofac,exception,api result,jwt,efcore)七、引入efcore_第12张图片

 在program.cs中添加数据库注入

#region 注入数据库

var conn = config.GetConnectionString("AuthDb");

builder.Services.AddEntityFrameworkMySql().AddDbContext(options => options.UseMySql(conn, ServerVersion.Parse("8.0.29-mysql")));

#endregion

然后在TestController中添加依赖注入,添加测试代码

更改后的代码如下

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using NET6Demo.IRepository;
using NET6Demo.IService;
using NET6Demo.Model;
using NET6Demo.Utility.Token;
using System.IdentityModel.Tokens.Jwt;

namespace NET6Demo_WebApi.Controllers
{
    public class TestController : BaseController
    {
        private ILogger _logger;
        private readonly IServiceProvider _provider;        
        private IUserInfo _user;
        private JwtSecurityTokenHandler _jwtHandler;
        private TokenHelper _tokenHelper;
        private auth_dbContext _dbContext; //添加context依赖注入

        public TestController(
            ILogger logger,
            IServiceProvider provider,
            IUserInfo user,
            JwtSecurityTokenHandler jwtSecurityTokenHandler,
            TokenHelper tokenHelper,
            auth_dbContext authDbContext) //添加context依赖注入
        {
            _logger = logger;
            _provider = provider;
            _user = user;
            _jwtHandler = jwtSecurityTokenHandler;
            _tokenHelper = tokenHelper;
            _dbContext = authDbContext; //添加context依赖注入
        }

        [AllowAnonymous]
        [HttpGet("GetTest")]
        public async Task GetTestResult(string userId)
        {
            Console.WriteLine("测试一下输出日志");
            _logger.LogInformation("日志输出了");
            _user = _provider.GetService().GetUser(userId);
            //throw new Exception("Test exception");
            //return Ok(_user);
            //return BadRequest();

            //return Ok(_tokenHelper.CreateJwtToken(_user));
            var user = _dbContext.Set().FirstOrDefault(); //从数据库中获取一个数据
            return Ok(user); 


        }

    }
}

然后运行程序,打开swagger,测试API,得到如下结果

net6 项目搭建及引用框架记录(log4net,autofac,exception,api result,jwt,efcore)七、引入efcore_第13张图片 

成功连接了数据库

至此框架搭建完毕

附:源码下载地址

GitHub - shirley-cat/NET6Demo_WebApi

 

你可能感兴趣的:(C#,Asp.net,core,.net,core,asp.net,core,开发语言,mysql)