script

# 数据库操作

# 简要

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

重要提示

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

# 数据库连接配置

支持多类型、多个数据库访问,同时支持一主多从数据库读写分离。数据库连接配置在appsettings.jsonDbConnections中,必须至少配置一个主数据库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 //是否可用
        }
      ]
    }
]

# 反馈与建议

与我们交流 给 YuebonCoreIssue(opens new window)

最后更新时间: 5/19/2022, 9:33:15 AM