.net 连接MySql数据库 + 使用Microsoft.EntityFrameworkCore.Design自动生成实体类 + 使用EFCore操作数据库

准备MySql数据库

先准备好一个mysql数据库(我这里准备的是test数据库,里面又准备了两张表,其中book表中只有两个字段,Id(bigint类型)和 Name(varchar类型))
在这里插入图片描述

使用Microsoft.EntityFrameworkCore.Design自动生成实体类

使用VS新建一个asp.net core web api项目(我这里使用的框架是.net5.0的,确保版本对应很重要)

打开终端
在这里插入图片描述
进到项目所在目录(我这里解决方案名为DBTest,项目名也为DBTest,所以要进入到DBTest\DBTest下而不是DBTest下)
在这里插入图片描述
安装工具

dotnet tool install --global dotnet-ef

在项目上安装包 Microsoft.EntityFrameworkCore.Design

dotnet add package Microsoft.EntityFrameworkCore.Design -v 5.0.13

可以运行以下命令以验证是否正确安装了 EF Core CLI 工具

dotnet ef

出现了下列输出则表示EF Core CLI安装成功
在这里插入图片描述
至此EF Core CLI工具算是准备好了,之后还要安装MySql相关包

安装Pomelo.EntityFrameworkCore.MySql包

dotnet add package Pomelo.EntityFrameworkCore.MySql -v 5.0.3

使用EF Core CLI生成实体类(确保数据库连接字符串正确)

dotnet ef dbcontext scaffold "server=localhost;userid=root;pwd=root;port=3306;database=test;sslmode=none;" Pomelo.EntityFrameworkCore.MySql -o Repository -f

其中-o用于指定输出路径
-f表示出现同名文件时覆盖原文件

出现Build Success就表示成功了
在这里插入图片描述
此时你会发现项目中多了一个Repository文件夹,里面有一个数据库上下文的类和一些实体类,这些实体类实际上就是对应了数据库的表
在这里插入图片描述

.net 连接 MySql数据库

在appsetting.json配置文件中加入连接字符串

"ConnectionStrings": {
  "MySQL":"server=localhost;user id=root;password=root;port=3306;database=test"
}

在这里插入图片描述
注册服务进容器

services.AddDbContext<testContext>(options => options.UseMySql(Configuration.GetConnectionString("MySQL"), ServerVersion.AutoDetect(Configuration.GetConnectionString("MySQL"))));

OK,连接 MySql数据库完成

使用EFCore操作数据库

现在在需要操作数据库的地方注入服务即可

例如在WeatherForecastController.cs中
在这里插入图片描述
再写一个Action来测试操作数据库

例如在book表中创建一条数据

[HttpGet("/CreateBook")]
public async Task<object> CreateBookAsync()
{
    var book = await _context.Books.AddAsync(new Book
    {
        Id = 123L,
        Name = "《ASP.NET Core框架揭秘》"
    });
    await _context.SaveChangesAsync();
    return book.Entity;
}

运行项目,访问相关CreateBookAsync接口

访问完毕后,查看数据库发现book表中多了一条数据

大功告成

附上一些数据库的其他操作

查询与修改:

[HttpGet("/UpdateBook")]
public async Task<object> UpdateBookAsync()
{
    //根据id查询
    var book = await _context.Books.FindAsync(123L);
    //修改
    book.Name = "《Hello World》";
    //保存修改
    return await _context.SaveChangesAsync();
}

查询与删除:

[HttpGet("/DeleteBook")]
public async Task<object> DeleteBookAsync()
{
    //根据条件查询单条数据
    var book = _context.Books.FirstOrDefault(book => book.Name == "《Hello World》");
    //在DBContext中删除数据
    _context.Books.Remove(book);
    //将删除操作同步到数据库中
    return await _context.SaveChangesAsync();
}

版权声明:本文为m0_47659279原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。