基于.NET CORE 3.1的WEB API通过EF CORE连接MySQL

基于.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;
            }
        }
    }
9、运行成功

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值