• 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; }
            }
        }
    }

    复制代码

  • 相关阅读:
    java毕业设计——基于java+jsp+Tomcat的电子书下载系统设计与实现(毕业论文+程序源码)——电子书下载系统
    隐式转换这个概念你听说过没?
    融合Sin混沌和分段权值的阿基米德优化算法-附代码
    istio学习(3)请求路由
    Mybatis学习(实现增删改查)
    mongodb 日志详情
    Java设计原则和设计模式
    这次把怎么做好一个PPT讲清-画图篇
    Element UI 表单验证规则动态失效问题
    springboot - 2.7.3版本 - (一)简单web应用
  • 原文地址:https://blog.csdn.net/arno1988/article/details/132661449