配置数据库主从库(发布订阅配置),参照链接:

SQL Server主从数据库配置过程_auspicious航的博客-CSDN博客_sqlserver主从

示例中使用为事务发布,如需要在不同服务器配置主从库,首先保证两服务器互通,之后再主库服务器中配置发布内容,在从库服务器中配置订阅内容,需注意在从库服务器中配置时,在新建订阅->查找SQL SERVER发布服务器时

弹出的对话框中,服务器名称处需填写目标服务器数据库属性中名称内容,否则会提示应输入服务器名称

 

 

 

 设置好数据库主从库后进行框架内配置

设置appsettings.json文件,添加读取数据库链接字符串和数据库类型(一般以主库为写库,从库为读库)

//在appsettings.json文件SystemConfig节点下添加以下节点(下方为配置单数据库读取,多数据库可添加多组节点)

"DBProviderRead": "SqlServer",
    "DBConnectionStringRead": "Data Source=读取数据库地址;database=读取数据库名称;uid=读取数据库登陆账号;pwd=读取数据库登陆密码;Pooling=true;Max Pool Size=10240;Min Pool Size=150;Connection Lifetime=10",
    "DBCommandTimeoutRead": 180, // 数据库超时时间,单位秒
    "DBBackupRead": "", // 数据库备份路径

对应修改项目下YiSha.Util\YiSha.Util\Model\SystemConfig.cs文件

如下图

 

添加在appsettings.json中添加的节点名称至SystemConfig类中。

在项目下YiSha.Data\YiSha.Data.Repository\RepositoryFactory.cs文件中添加方法

/// <summary>
        /// 自定义仓储
        /// </summary>
        /// <param name="DBConnection">连接字符串</param>
        /// <returns></returns>
        public Repository BaseRepository(string dbType, string DBConnection)
        {
            IDatabase database = null;
            string dbConnectionString = DBConnection;  //第二个数据库链接  多数据库时候用
            switch (dbType)
            {
                case "SqlServer":
                    DbHelper.DbType = DatabaseType.SqlServer;
                    database = new SqlServerDatabase(dbConnectionString);
                    break;
                case "MySql":
                    DbHelper.DbType = DatabaseType.MySql;
                    database = new MySqlDatabase(dbConnectionString);
                    break;
                case "Oracle":
                    DbHelper.DbType = DatabaseType.Oracle;
                    // 支持Oracle或是更多数据库请参考上面SqlServer或是MySql的写法
                    break;
                default:
                    throw new Exception("未找到数据库配置");
            }
            return new Repository(database);
        }


调用示例

//调用示例
var list11 = await this.BaseRepository("MySql", GlobalContext.SystemConfig.DBConnectionString2).FindEntity<UserEntity>(id);

var list22 = await new RepositoryFactory().BaseRepository("SqlServer", GlobalContext.SystemConfig.DBConnectionString1).FindEntity<UserEntity>(id);

至此所有配置完成

使用中调用写库配置对数据库进行写入(主库写入),数据会自动通过事务同步到从库

调用读库配置对数据库进行读取(从库读取)

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐