文章目录
准备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(options => options.UseMySql(Configuration.GetConnectionString("MySQL"), ServerVersion.AutoDetect(Configuration.GetConnectionString("MySQL"))));
OK,连接 MySql数据库完成
使用EFCore操作数据库
现在在需要操作数据库的地方注入服务即可
例如在WeatherForecastController.cs中
再写一个Action来测试操作数据库
例如在book表中创建一条数据
[HttpGet("/CreateBook")]
public async Task 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 UpdateBookAsync()
{
//根据id查询
var book = await _context.Books.FindAsync(123L);
//修改
book.Name = "《Hello World》";
//保存修改
return await _context.SaveChangesAsync();
}
查询与删除:
[HttpGet("/DeleteBook")]
public async Task DeleteBookAsync()
{
//根据条件查询单条数据
var book = _context.Books.FirstOrDefault(book => book.Name == "《Hello World》");
//在DBContext中删除数据
_context.Books.Remove(book);
//将删除操作同步到数据库中
return await _context.SaveChangesAsync();
}