基于.NET CORE 3.1的WEB API通过EF CORE连接MySQL
注:本文不采用CodeFirst,不使用迁移。
1、准备好一个WEB API项目,可以看我之前的文章。
2、准备好一个MySQL数据库并创建表。
3、引用nuget包Pomelo.EntityFrameworkCore.MySql和Microsoft.EntityFrameworkCore
3、在Models文件夹下新建实体
public class T_People
{
[Key]
[Required]
public int Id { get; set; }
public string Name { get; set; }
}
4、新建一个DbContext对象,如果表有多主键,需要放开注释那行
public partial class EFTestContext : DbContext
{
public EFTestContext()
{
}
public EFTestContext(DbContextOptions<EFTestContext> options)
: base(options)
{
}
public virtual DbSet<T_People> T_People { get; set; } = null!;
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
//modelBuilder.Entity<T_Type_Label>().HasKey(t => new { t.Type, t.Label });
base.OnModelCreating(modelBuilder);
}
}
5、在appsetting.json添加数据库配置信息
"ConnectionStrings": {
"MySQLConnection": "server=rm-172.12.18.131;port=3306;uid=root;pwd=123456;database=eftest"
}
6、在Startup类里添加上下文对象
var sqlConnectionString = Configuration.GetConnectionString("MysqlConnection");
services.AddDbContext<EFTestContext>(options => options.UseMySql(sqlConnectionString));
7、EF的使用,在我们的api里使用依赖注入通过ef连接数据库
[Route("api/[controller]/[action]")]
[ApiController]
public class EFController : ControllerBase
{
EFTestContext FTestContext;
public EFController(EFTestContext FTestContext)
{
this.FTestContext = FTestContext;
}
[HttpGet]
public string Test()
{
return FTestContext.T_People.FirstOrDefault().Name;
}
}
8、不通过依赖注入,通过简单工厂也可以实现DBContext的调用
创建DBCreate类
public static class DBCreate
{
private static IServiceProvider serviceProvider;
public static void RegistServiceProvider(IServiceProvider provider)
{
serviceProvider = provider;
}
public static DBContext CreateContext()
{
return serviceProvider.CreateScope().ServiceProvider.GetService<DBContext>();
}
}
Startup里注册
DBCreate.RegistServiceProvider(app.ApplicationServices);
API里EF的使用有所不同
[Route("api/[controller]/[action]")]
[ApiController]
public class EFController : ControllerBase
{
[HttpGet]
public string Test()
{
using (var ef = DBCreate.CreateContext())
{
return ef.T_People.FirstOrDefault().Name;
}
}
}