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

    复制代码

  • 相关阅读:
    C++类和对象(二)构造函数、析构函数、拷贝构造函数
    Google Earth Engine(GEE)——如何创建一个属性给feature Collection使其图形加载过程中可以出现名称
    keycloak~jwt的rs256签名的验证方式
    BI业务分析思维:生产制造供应链订单交付优化分析三种方式
    ROS 2知识:通信协议 DDS/RTPS
    服务器安装运行jupyter notebook
    pysot-master-train.py 运行记录
    Bankless:4种可以让你在以太坊合并中获益的方式
    1.6HTML的表格和列表
    OpenCV6-图形绘制
  • 原文地址:https://blog.csdn.net/arno1988/article/details/132661449