• C#FreeSql分库分表


    复制代码

    using FreeSql;
    using FreeSql.DataAnnotations;
    
    namespace FreeSqlMaster
    {
        internal class Program
        {
            static IFreeSql freeSql = null;
    
            static void Main(string[] args)
            {
                // 读写分离
                // FreeSql 实现了第3种方案,支持一个【主库】多个【从库】,【从库】的查询策略为随机方式。
                // 若某【从库】发生故障,将切换到其他可用【从库】,若已全部不可用则使用【主库】查询。
                // 出现故障【从库】被隔离起来间隔性的检查可用状态,以待恢复
                var connstr_master = "server=127.0.0.1;port=3306;database=test;user=root;password=root;charset=utf8;SslMode=none;Pooling=true;Min Pool Size=0;Max Pool Size=100;Charset=utf8";
                var connstr_slave1 = "server=127.0.0.1;port=3306;database=test1;user=root;password=root;charset=utf8;SslMode=none;Pooling=true;Min Pool Size=0;Max Pool Size=100;Charset=utf8";
                var connstr2_mysql = "server=127.0.0.1;port=3306;database=test;user=root;password=root;charset=utf8;SslMode=none;Pooling=true;Min Pool Size=0;Max Pool Size=100;Charset=utf8";
    
                freeSql = new FreeSql.FreeSqlBuilder()
                    .UseConnectionString(FreeSql.DataType.MySql, connstr_master)
                    .UseAutoSyncStructure(true) // 自动同步实体结构到数据库
                                                //.UseSlave(connstr_slave1)//, "connstr_sqlserver2") //使用从数据库,支持多个
                                                //.UseSlaveWeight()
                    .Build();
    
                //Student model = new Student() { Name = "1" };
                //freeSql.Insert(model).ExecuteAffrows();
                freeSql.Update().SetSource(model).ExecuteAffrows();
    
                //var d = freeSql.Select().Where(x => x.Name == "1").First(); //select.Where(a => a.Id == 1).ToOne(); //读【从库】(默认) //select.Master().WhereId(a => a.Id == 1).ToOne(); //强制读【主库】  
    
                // 分表
                //freeSql.Select().Any();
                var logRepository = freeSql.GetGuidRepository(null, oldname => $"{oldname}_201903");
                logRepository.Insert( new Log() { Content = "201903" });
                logRepository.Update(new Log() { Content = "111", Id = 1 });
                logRepository.Delete(new Log() { Id = 1 });
    
                logRepository = freeSql.GetGuidRepository(null, oldname => $"{oldname}_201904");
                logRepository.Insert(new Log() { Content = "201904" });
    
                // 跨表查询
                var sql = freeSql.Select()
                        .AsTable((type, oldname) => "Log_201903")
                        .AsTable((type, oldname) => "Log_201904")
                        .ToList();// a => a.Id
    
                // 分库 
                IdleBus ib = new IdleBus(TimeSpan.FromMinutes(10)); 
                ib.Register("test", () => new FreeSqlBuilder().UseConnectionString(DataType.MySql, connstr_master).Build());
                ib.Register("test1", () => new FreeSqlBuilder().UseConnectionString(DataType.MySql, connstr_slave1).Build()); 
                var lst1 = ib.Get("test").Select().Limit(10).ToList();
                var lst2 = ib.Get("test1").Select().Limit(10).ToList();
    
                Console.ReadKey();
            }
    
            public class Student
            {
                [Column(Name = "id", IsIdentity = true, IsPrimary = true)]
                public int Id { get; set; }
                public string Name { get; set; }
            }
    
            public class Log
            {
                [Column(Name = "id", IsIdentity = true, IsPrimary = true)]
                public int Id { get; set; }
                public string Content { get; set; }
            }
        }
    }

    复制代码

  • 相关阅读:
    topy库的安装(拓扑优化软件)
    【maptplotlib大全图】一段代码洞查matplotlib图片真谛
    电网变电站安全作业行为规范检测-绝缘手套佩戴检测图像数据集(VOC,YOLO两类标签,六类目标)
    神经网络模型的基本原理,如何建立神经网络模型
    SpringMVC 数据映射VC
    [接口自动化] 禅道登录 Python+requests[纯代码]
    初识Docker
    leetcode 马拉松 6.27
    Python实现JavaScript中AES加密有关填充问题
    安全测试工具BurpSuite
  • 原文地址:https://blog.csdn.net/arno1988/article/details/132661449