• Magic.Admin的多库操作


    在平时的开发中,受到传统模式的影响,我们都是习惯了单一的数据库表操作,把数据都建到一个库里边,然后进行增删改查,这个是很经典的开发模式。

    但是随着项目开发,总会出现这样的应用场景:
    1、我们新的系统建立了新库,但是老板让我们把具有相同结构的老数据库也带上(导入到一起或者定时同步,这里不讨论)

    2、项目慢慢变大,我们要分库分表了,可能订单数据和用户数据被分开了,但是同一个api业务逻辑里,可能我们需要操作多个DB,比如我正在走的是主库,然后有一个操作,需要把数据从另一个DB里区保存或者查询。

    3、想在测试的时候,同时无缝测试多个库连接,比如我的Blog.Core,每次我提交一个版本,都需要对Sqlite、MySql、MSSql(LocalDB)等同时做测试,那我就想在不停掉项目的前提下,做多库测试。

    说白了,就是要做多库操作

    在Magic.Admin中,多库操作很容易,主要有以下几步:

    1. 配置多库连接字串   在Magic.Web.Core/dbsettings.json,写入你的多数据库连接:

     1 {
     2   "ConnectionStrings": {
     3     "DefaultDbNumber": "0",
     4     "DefaultDbType": "Sqlite",
     5     "DefaultDbString": "Data Source=./Magic.db",
     6     "DbConfigs": [
     7       {
     8         "DbNumber": "1",
     9         "DbType": "Sqlite",
    10         "DbString": "Data Source=./Magic.db"
    11       },
    12       {
    13         "DbNumber": "2",
    14         "DbType": "SqlServer",
    15         "DbString": "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=Kingdee;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"
    16       },
    17       {
    18         "DbNumber": "3",
    19         "DbType": "MySql",
    20         "ConnectionString": "Server=127.0.0.1;Port=3306;User Id=root;Password=123456;Database=bigDataDB;"
    21       }
    22     ]
    23   }
    24 }

    系统会自动读入数据库配置,配置到SqlClient中。

    2. 在你的service中使用注入SqlClient, 并从注入的SqlClient中切换数据库。

     1 using Furion.DynamicApiController;
     2 using Learning.Entity;
     3 using Microsoft.AspNetCore.Authorization;
     4 using SqlSugar;
     5 
     6 namespace Learning.Services
     7 {
     8     /// <summary>
     9     /// Fur学习
    10     /// </summary>
    11     [AllowAnonymous]
    12     public class TestService : IDynamicApiController,ITestService
    13     {
    14         SqlSugarClient mClient;
    15         public TestService(ISqlSugarClient client) 
    16         {//构造函数注入方式注入SqlClient. 注意因ISqlSugarClient没有多库切换功能,需要转换成SqlSugarClient
    17             mClient = client as SqlSugarClient;
    18         }
    19         /// <summary>
    20         /// 问候Furion
    21         /// </summary>
    22         /// <returns></returns>
    23         public string SayHello()
    24         {
    25             var erpClient = mClient.GetConnection(2);//切换到数据库2
    26             var list = erpClient.Queryable<KbtErpMoInfo>().ToList(); //执行正常的查询
    27             if(list.Count > 0)
    28             {
    29                 return $"切换到数据库2, 获取到了 {list.Count} 条数据";
    30             }
    31             return "切换失败或者数据库异常";
    32         }
    33         /// <summary>
    34         /// 带参数的问候
    35         /// </summary>
    36         /// <param name="id">用户ID</param>
    37         /// <returns></returns>
    38        
    39         public string SayHello(int id)
    40         {
    41             return $"Hello {nameof(Furion)} from User {id}";
    42         }
    43     }
    44 }

    效果显示:

  • 相关阅读:
    nodejs install
    taobao sass
    Cors 跨域访问API
    多文件上传
    Next
    实用小工具
    下载包含src,tgz,zip的文件
    HTML5文件API
    Bootstrap (导航、标签、面包屑导航)
    Bootstrap 固定定位(Affix)
  • 原文地址:https://www.cnblogs.com/ccjungle/p/15933548.html
Copyright © 2020-2023  润新知