.Net Core微服务入门——Web API数据库支持

创建好Web API,并发布到Docker后,就需要连接数据库,做一些基本操作。

本文介绍如何 连接SQL Server 和 连接MySQL

连接SQL Server

通过NuGet添加相关的包:

Microsoft.EntityFrameworkCore.SqlServer
在这里插入图片描述

2、新增数据库连接配置

在 在appsettings.json 新增数据库连接

  "ConnectionStrings": {
    "SQLServerConnection": "Server=192.168.8.1;Database=Test;User Id=sa;Password=123456;",
  }

3、在Startup中注册服务

var connStr = Configuration.GetConnectionString(“SQLServerConnection”);
services.AddDbContext(builder => builder.UseSqlServer(connStr));

在这里插入图片描述

4、构建实体类

public class Product
    {
        [Key] //[Key]特性标识表明Code为主键。
        public string Code { get; set; }
        public string Name { get; set; }
        public string Descript { get; set; }
        public int Numbers { get; set; }
    }

5、新建DBContext类

public class SqlContext : DbContext
    {

        public SqlContext(DbContextOptions<SqlContext> builder) : base(builder)
        {

        }

        //注意,这里必须与表名一致 如不一致,必须要OnModelCreating 方法,指定表名
        public DbSet<Product> Products { get; set; }

        /// <summary>
        /// 指定表名
        /// </summary>
        /// <param name="modelBuilder"></param>
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Product>().ToTable("Product");
        }
    }

6、新建一个Controller

新增相关数据库操作接口

 [Produces("application/json")]
    [Route("api/product")]
    public class ProductsController
    {
        private readonly SqlContext _context;

        public ProductsController(SqlContext context)
        {
            _context = context;
        }

        /// <summary>
        /// 获取产品列表
        /// </summary>
        /// <returns>产品列表</returns>
        [Route("GetAll")]
        [HttpGet]
        public List<Product> GetAllProducts() 
        {
            var products = _context.Products.ToList<Product>();

            return products;
        }
}

调试运行

调用接口 https://localhost:49165/api/product/getall,返回信息如下:

在这里插入图片描述

连接MySQL

通过NuGet添加相关的包:

Pomelo.EntityFrameworkCore.MySql
在这里插入图片描述
注:
网上很多资料都是关于引用 MySql.Data.EntityFrameworkCore 连接MySql的,但MySql.Data.EntityFrameworkCore目前好像已经弃用了
在这里插入图片描述
引用 MySql.Data.EntityFrameworkCore后,会报以下错误:

MySql.Data.EntityFrameworkCore.Query.Internal.MySQLSqlTranslatingExpressionVisitorFactory' from assembly 'MySql.Data.EntityFrameworkCore, Version=8.0.22.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d' does not have an implementation

2、新增MySql数据库连接配置

在 在appsettings.json 新增数据库连接

  "ConnectionStrings": {
    "MySQLConnection": "Server=192.168.8.1;port=3316;database=test;uid=root;pwd=123456;SslMode=None;",
  }

3、在Startup中注册服务

 var connMysqlStr = Configuration.GetConnectionString("MySQLConnection");
 services.AddDbContextPool<MySqlContext>(builder => builder.UseMySql(connMysqlStr, new MySqlServerVersion(new Version(8, 0, 11))));

注: 这里必须指定 ServerVersion,否则无法编译通过

4、新建DBContext类

public class MySqlContext: DbContext
{
     public MySqlContext(DbContextOptions<MySqlContext> builder) : base(builder)
     {

     }

     protected override void OnConfiguring(DbContextOptionsBuilder optionBuilder)
     {
         base.OnConfiguring(optionBuilder);
     }

     //注意,这里必须与表名一致 如不一致,必须要OnModelCreating 方法,指定表名
     public DbSet<Product> Products { get; set; }

     /// <summary>
     /// 指定表名
     /// </summary>
     /// <param name="modelBuilder"></param>
     protected override void OnModelCreating(ModelBuilder modelBuilder)
     {
         modelBuilder.Entity<Product>().ToTable("Product");
     }

 }

5、新建一个Controller

新增相关数据库操作接口

  [Produces("application/json")]
  [Route("api/product2")]
  public class ProductsMySql1Controller
  {
      private readonly MySqlContext _context;

      public ProductsMySql1Controller(MySqlContext context)
      {
          _context = context;
      }

      /// <summary>
      /// 获取产品列表
      /// </summary>
      /// <returns>产品列表</returns>
      [Route("GetAll")]
      [HttpGet]
      public List<Product> GetAllProducts()
      {
          var products = _context.Products.ToList<Product>();

          return products;
      }
}

调试运行

调用接口 https://localhost:49165/api/product2/getall,返回信息如下:

在这里插入图片描述
到这来,连接SQL Server 和 MySQL 已完成

下一章我们将介绍 Consul服务注册与发现
https://blog.csdn.net/weixin_41003771/article/details/118708034

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值