.net5 简易版本sql 读写分离

.net5 简易版本sql 读写分离

关于sqlserver如何配置主从库,请在复制发布订阅那一块操作,后面会出一篇文章

配置Appsetting.json

"DbContext": {
    "DbType": "sql",
    //"ConnectionString": "Data Source=DESKTOP-23DM9NS; Initial Catalog=ZHIBO; User Id=tudawei;Password=tudawei123456"
    //"ConnectionStringSql": "Data Source=niubi;Initial Catalog=ZHIBO; User Id=david;Password=david123456",
    "ConnectionString": "Data Source=PC04E0010016\\MSSQLSERVER01;Initial Catalog=ZHIBO; User Id=niubi;Password=123456",
    "ReadConnectionString": "Data Source=DESKTOP-23DM9NS; Initial Catalog=ZHIBO; User Id=tudawei;Password=123456789",
    "WriteConnectionString": "Data Source=DESKTOP-23DM9NS; Initial Catalog=ZHIBO; User Id=tudawei;Password=123456789"
  },

配置Appsetting.json 映射类

 public  class Appsetting
    {
        /// <summary>
        /// 数据库类型
        /// </summary>
        public  DbType DbType { set;get;}

        /// <summary>
        /// 连接字符串
        /// </summary>
        public  string ConnectionString{ set; get; }

        /// <summary>
        /// 读字符串
        /// </summary>
        public string ReadConnectionString { set; get; }

        /// <summary>
        /// 写字符串
        /// </summary>
        public string WriteConnectionString { set; get; }


    }

服务注册

  services.Configure<Appsetting>(Configuration.GetSection("DbContext"));//appsetting映射到实体
    services.AddTransient<IDapperHelper, DapperHelper>();
            services.AddTransient<IDateDapper, DateDapper>();
            services.AddTransient<DbConnection, SqlConnection>();

数据库相关封装

  public interface IDateDapper
    {
        IDbConnection CreateDb(DbOperate dbOperate);
    }
 public class DateDapper: IDateDapper
    {
        private readonly IOptions<Appsetting> _options = null;
        private readonly DbConnection _dbConnection = null;
        public DateDapper(IOptions<Appsetting> options, DbConnection dbConnection)
        {
            _options = options;
            _dbConnection = dbConnection;
        }
        public IDbConnection CreateDb(DbOperate dbOperate)
        {
            IDbConnection idbConnection = null;
            switch (_options.Value.DbType)
            {
                /*  case DbType.oracle:
                      idb = new Oracle();
                      break;
                  case DbType.mysql:
                      idb = new Mysql();
                      break;*/
                case DbType.oracle:
                    //idbConnection = new OracleConnection();
                    //_dbConnection.ConnectionString= _options.Value.ConnectionString;
                    idbConnection = ReadOrWrite(dbOperate);
                    break;
                case DbType.sql:
                    idbConnection = ReadOrWrite(dbOperate);
                    //_dbConnection.ConnectionString = _options.Value.ConnectionString;
                    //idbConnection.ConnectionString = _options.Value.ConnectionString;
                    break;
                default:
                    throw new Exception("数据库选取错误");

            }
            return idbConnection;
        }

        public IDbConnection ReadOrWrite(DbOperate dbOperate)
        {
        //读出写的数据库,然后随机获取下标,最后取值的时候给上下标就好了
            switch (dbOperate)
            {
                case DbOperate.Read:                 
                    _dbConnection.ConnectionString= _options.Value.ReadConnectionString;
                    break;
                case DbOperate.Write:
                    _dbConnection.ConnectionString = _options.Value.WriteConnectionString;
                    break;
                default:
                    throw new Exception("读写数据库选取错误!");
            }
            return _dbConnection;
        }


    }
    public enum DbType {
        oracle,
        mysql,
        sql
    }

    public enum DbOperate
    {
        Read,
        Write      
    }

Controller使用

 private IDateDapper _dataDapper = null;
       // private readonly IBackgroundJobClient _jobClient;
        public ValuesController(IDateDapper dataDapper)
        {
            _dataDapper = dataDapper;          
        }
        [HttpGet]   
        [NoAuth]
        public async Task<IEnumerable<User> >  Search()
        {
            string sql = " select *  from  ClientUser";
            var entity = await _dataDapper.CreateDb(DbOperate.Read).QueryAsync<User>(sql);
            return  entity;
        }

源码地址:https://github.com/18896605194/GeneralCore

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小盆友你是否很有多问号

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值