YuebonCore快速开发框架YuebonCore快速开发框架
首页
指南
视频教程
  • vue版
  • api接口
gitee
首页
指南
视频教程
  • vue版
  • api接口
gitee
  • 指南
  • 快速了解

    • 快速了解
    • 快速使用
  • 环境部署
    • 部署
    • linux 环境部署
  • 手摸手

    • 业务设计
    • 业务数据层
    • 业务服务层
    • 业务对外 API
  • 后台开发

    • 必要配置
    • 数据库实体
    • 缓存机制
    • 定时任务
    • 数据库操作
      • 简要
      • 数据库连接配置
        • 单数据库配置
        • 多类型数据库配置
      • 多数据库配置
      • 内置仓储
      • 多事务处理
        • 单表批量操作
        • 多表批量操作
      • 读写分离
        • 开启配置
        • 从数据库配置
        • 反馈与建议
    • 多系统切换
    • 接口与版本控制
    • Saas 多租户
  • 前端开发

    • 基础搭建
    • 开发规范
    • 模块菜单
    • ESLint
  • 更新日志

    • 更新日志
  • 常见问题

数据库操作

简要

系统集成目前集成了 Dapper 和 EntityFramework Core(简称“EF”)进行数据操作。常用数据操作方法已在仓储基类 BaseRepository 提供。在 BaseRepository 我们提供 SqlSugar 对数据库操作,下面介绍各种数据操作。

重要提示

BaseRepository 是仓储实现基类,所有业务模块的仓储类都继承该基类。建议开发者在各业务模块仓储实现自己的业务功能,方便平滑更新升级。

数据库连接配置

支持多类型、多个数据库访问,同时支持一主多从数据库读写分离。数据库连接配置在appsettings.json中DbConnections中,必须至少配置一个主数据库MasterDB。

单数据库配置

配置一个主数据库MassterDB即可,如下:

"DbConnections": [
    {
      "ConnId": "DefaultDb",
      "Enabled": true,
      "MasterDB": { //必须配置,远程服务器数据库
        "ConnectionString": "server=127.0.0.1;database=ybnf1;user=root;CharSet=utf8;password=123456;port=3306;CharSet=utf8mb4;Allow User Variables=True;SslMode=none;AllowLoadLocalInfile=true;",
        "DatabaseType": 0, //数据库类型
        "Enabled": true //是否可用
      },
      "ReadDB": []
    }
]

其中:

1、ConnectionString 指定数据库连接

2、DatabaseType 指定数据库类型,需要注意DatabaseType指定数据库类型,目前支持的数据库类型值有 mysql=0,SqlServer=1,Oracle=2,Access=3,SQLite=4,PostgreSQL=5,Npgsql=6,Dm=7,Kdbndp=8。

3、MassterDB 为主数据库配置信息,在不开启读写分离的情况下,仅配置该参数即可。

多类型数据库配置

需配置多个MasterDB,如下:

"DbConnections": [
    {
      "ConnId": "DefaultDb",
      "Enabled": true,
      "MasterDB": { //必须配置,远程服务器数据库
        "ConnectionString": "server=127.0.0.1;database=ybnf1;user=root;CharSet=utf8;password=123456;port=3306;CharSet=utf8mb4;Allow User Variables=True;SslMode=none;AllowLoadLocalInfile=true;",
        "DatabaseType": 0, //数据库类型
        "Enabled": true //是否可用
      },
      "ReadDB": []
    },
    {
      "ConnId": "LocalDB",
      "Enabled": true,
      "MasterDB": { //本地数据库
        "ConnectionString": "server=localhost;Database=bonwcslocal1;Uid=root;Pwd=123456;Port=3306;CharSet=utf8mb4;Allow User Variables=True;SslMode=none;AllowLoadLocalInfile=true;",
        "DatabaseType": 0, //数据库类型
        "Enabled": true //是否可用
      },
      "ReadDB": [
        {
          "ConnectionString": "", //数据库连接字符
          "HitRate": "", //从库执行访问权重,越大越先执行
          "Enabled": true //是否可用
        },
        {
          "ConnectionString": "", //数据库连接字符
          "HitRate": "", //从库执行访问权重,越大越先执行
          "Enabled": true //是否可用
        }
      ]
    }
]

多数据库配置

在项目中常常会使用到多个不同类型数据库,我们需要在对应的实体指定该实体对应哪个数据库。采用[AppDBContext("xxx")]属性进行标记。xxx 即为数据库配置连接字符串名称。

/// <summary>
/// 系统日志,数据实体对象
/// </summary>
[AppDBContext("MsSqlServerCode")]
[Table("Sys_Log")]
[Serializable]
public class Log: BaseEntity<string>, ICreationAudited, IModificationAudited, IDeleteAudited
{
    /// <summary>
    /// 默认构造函数(需要初始化属性的在此处理)
    /// </summary>
    public Log()
    {
        this.Id = GuidUtils.CreateNo();
    }
}

内置仓储

YuebonCore 框架内置了一个数据库操作的仓储,方便大家拓展和集成:

IRepository:默认非泛型仓储接口,支持切换到任何仓储; BaseRepository:默认非泛型仓储实现。

每个业务模块仓储都将继承 BaseRepository 类。如下:

/// <summary>
/// 定时任务仓储接口的实现
/// </summary>
public class TaskManagerRepository : BaseRepository<TaskManager>, ITaskManagerRepository
{
    /// <summary>
    /// EF 数据操作注入
    /// </summary>
    /// <param name="context"></param>
    public TaskManagerRepository(IDbContextCore context) : base(context)
    {
    }

}

多事务处理

单表批量操作

单表批量操作建议使用BulkInsert方法

多表批量操作

多表数据操作推荐使用ExecuteTransaction()或ExecuteTransactionAsync()方法。

读写分离

开启配置

修改 Yuebon.WebApp/appsettings.json 中的 AppSetting 配置,设置 IsDBReadWriteSeparate 为 true 开启数据库读写分离,默认为 false,不开启。如下:

  "AppSetting": {
    "SoftName": "YueBonCore Framework",
    "CertificatedCompany": "Yuebon",
    "ConStringEncrypt": "false",//连接字符串是否加密
    "DefaultDataBase": "DefaultDb",//默认数据库连接
    "IsDBReadWriteSeparate": false, //开启数据库读写分离
    "QueryDBStrategy": "Random", //定义多个从数据库的访问策略
  },

从数据库配置

在数据库连接配置中配置 ReadDB 即可。其中 HitRate 是从库执行访问权重,越大越先执行。

"DbConnections": [
    {
      "ConnId": "LocalDB",
      "Enabled": true,
      "MasterDB": { //本地数据库
        "ConnectionString": "server=localhost;Database=bonwcslocal1;Uid=root;Pwd=123456;Port=3306;CharSet=utf8mb4;Allow User Variables=True;SslMode=none;AllowLoadLocalInfile=true;",
        "DatabaseType": 0, //数据库类型
        "Enabled": true //是否可用
      },
      "ReadDB": [
        {
          "ConnectionString": "", //数据库连接字符
          "HitRate": "", //从库执行访问权重,越大越先执行
          "Enabled": true //是否可用
        },
        {
          "ConnectionString": "", //数据库连接字符
          "HitRate": "", //从库执行访问权重,越大越先执行
          "Enabled": true //是否可用
        }
      ]
    }
]

反馈与建议

与我们交流 给 YuebonCore 提 Issue。

Prev
定时任务
Next
多系统切换