.net core 3.0 连接mysql填坑指南

.net core 3.0 连接mysql填坑指南

    • 新建项目
    • 安装mysql
    • 添加文件夹,添加DbContext类
    • 添加实体类文件夹
    • 添加一个Dao方法
    • 添加controller
      • 添加区域
      • 添加controller
      • 添加nuget:Pomelo.EntityFrameworkCore.MySql
    • 修改startup文件

新建项目

新建->项目->c#->.net core web->api
.net core 3.0 连接mysql填坑指南_第1张图片

安装mysql

win: 下载地址
linux :自行百度教程
安装完成后,修改用户及权限。最新版的mysql创建用户赋予权限是分开的。
旧:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION; 

%可以换成固定ip。
新:

create user 'root'@'%'  identified by '密码'; 
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';

创建完用户之后,由于加密问题可能导致core报错 (貌似是因为mysql8.0的加密方式) 。如果出现publickey=true之类的字样,大概率是因为mysql加密这里的出了问题。
解决方式

ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; #修改加密规则 
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password'; #更新密码 
FLUSH PRIVILEGES; #刷新权限

之后根据实体类创建表。

添加文件夹,添加DbContext类

在项目根目录下添加文件夹,用来放数据库相关文件。我这里是Dao
.net core 3.0 连接mysql填坑指南_第2张图片
Dao层新建Context文件,也就是数据上下文文件。我这里是WebDbContext。注入时会用到。
修改WebDbContext

public class WebDbContext : DbContext
    {
        public WebDbContext(DbContextOptions<WebDbContext> options) : base(options)
        {
        }
    }

这里会提示DbContext 找不到之类的错误,放在上面添加修改的时候会提示你安装Microsoft.EntityFrameworkCore的包,如果没有去nuget里自己装一下。

添加实体类文件夹

同样在项目根目录下添加文件夹Entity,随你高兴叫啥名。文件夹下添加一个实体类
.net core 3.0 连接mysql填坑指南_第3张图片
完成之后
WebDbContext 添加该实体。

 using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Web3._1.Entity;

namespace Web3._1.Dao
{
    public class WebDbContext : DbContext
    {
        public WebDbContext(DbContextOptions<WebDbContext> options) : base(options)
        {
        }

        public DbSet<Account> Account { get; set; }
    }
}

添加一个Dao方法

在Dao文件夹下,新建AccountDao.cs文件。修改文件内容。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Web3._1.Entity;

namespace Web3._1.Dao
{
    public class AccountDao
    {
        #region 依赖注入
        private WebDbContext dbContext;

        public AccountDao(WebDbContext _WebDbContext) 
        {
            dbContext = _WebDbContext;
        }
        #endregion


        #region 添加账户
        /// 
        /// 添加账户
        /// 
        /// 
        /// 
        public bool Add(Account account) 
        {
            dbContext.Account.Add(account);
            return dbContext.SaveChanges() > 0;
        }
        #endregion
    }
}

这种注入方式用着十分不便,但是我刚开始研究,也没有找到好的方式解决,先凑乎使用吧。

添加controller

因为我这里是做的api,所以使用了区域。如果没有这方面的可以直接在controller里调用。一样原理不再赘述。

添加区域

右键项目名,添加
.net core 3.0 连接mysql填坑指南_第4张图片
.net core 3.0 连接mysql填坑指南_第5张图片
选择mvc区域。如果添加失败重新加载一下项目,再试一次。文件别有错误,有错误先解决注释掉。
添加成功以后,会出现提示文本告诉你要去startup添加路由规则
.net core 3.0 连接mysql填坑指南_第6张图片
这里后面会修改。

添加controller

using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Web3._1.Dao;
using Web3._1.Entity;

namespace Web3._1.Areas.Admin.Controllers
{
    public class AccountController:Controller
    {
        private AccountDao accountDao;

        public AccountController(AccountDao _accountDao) 
        {
            accountDao = _accountDao;
        }

        public JsonResult Add() 
        {
            var entity = new Account()
            {
                ID = Guid.NewGuid().ToString(),
                AccountName = "sa01",
                Password = "123456",
                CreateDate = DateTime.Now,
                Creator = Guid.NewGuid().ToString(),
                Modifier = Guid.NewGuid().ToString(),
                ModifyDate = DateTime.Now
            };

            accountDao.Add(entity);
            return Json(new { state =1 });
        }
    }
}

添加nuget:Pomelo.EntityFrameworkCore.MySql

搜素Pomelo.EntityFrameworkCore.MySql,mysql官方的不支持core 3+

修改startup文件

找到 ConfigureServices 类,在里面添加依赖。

 public void ConfigureServices(IServiceCollection services)
        {
            //添加数据上下文
            services.AddDbContext<WebDbContext>(d => d.UseMySql(Configuration.GetConnectionString("Web3.1")));
            //添加dao层依赖
			services.AddTransient<AccountDao>();
            services.AddControllers();
        }

找到 Configure 类,修改路由规则

 app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
                endpoints.MapAreaControllerRoute("Admin", "Admin", "Admin/{controller=Home}/{action=Index}/{id?}");
            });

找到appsetting.json,添加一行

"ConnectionStrings": {
    "Web3.1": "Data Source=数据库地址;Database=数据库名;UserID=数据库连接名;Password=连连接密码;pooling=true;CharSet=utf8mb4;port=3306;sslmode=none"
  },

启动项目,有错改错。没错基本就完了。

你可能感兴趣的:(C#)