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<Student>().SetSource(model).ExecuteAffrows();

            //var d = freeSql.Select<Student>().Where(x => x.Name == "1").First(); //select.Where(a => a.Id == 1).ToOne(); //读【从库】(默认) //select.Master().WhereId(a => a.Id == 1).ToOne(); //强制读【主库】  

            // 分表
            //freeSql.Select<Log>().Any();
            var logRepository = freeSql.GetGuidRepository<Log>(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<Log>(null, oldname => $"{oldname}_201904");
            logRepository.Insert(new Log() { Content = "201904" });

            // 跨表查询
            var sql = freeSql.Select<Log>()
                    .AsTable((type, oldname) => "Log_201903")
                    .AsTable((type, oldname) => "Log_201904")
                    .ToList();// a => a.Id

            // 分库 
            IdleBus<IFreeSql> ib = new IdleBus<IFreeSql>(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<Student>().Limit(10).ToList();
            var lst2 = ib.Get("test1").Select<Student>().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; }
        }
    }
}
相关推荐
极小狐5 小时前
极狐GitLab 命名空间的类型有哪些?
运维·git·c#·ssh·gitlab
夏子曦7 小时前
C#——NET Core 中实现汉字转拼音
开发语言·c#
柯南二号9 小时前
Android Studio根目录下创建多个可运行的模块
android·ide·android studio
zxy284722530111 小时前
C#上传文件到腾讯云的COS
c#·腾讯云·cos·oss·存储桶
冰茶_11 小时前
WPF之高级绑定技术
microsoft·微软·c#·wpf·mvvm·数据绑定
冰茶_12 小时前
WPF之尺寸属性层次
microsoft·微软·c#·wpf·布局系统
恋猫de小郭12 小时前
Compose Multiplatform iOS 稳定版发布:可用于生产环境,并支持 hotload
android·flutter·macos·ios·kotlin·cocoa
音视频牛哥14 小时前
把Android设备变成“国标摄像头”:GB28181移动终端实战接入指南
android·音视频·大牛直播sdk·gb28181安卓端·gb28181对接·gb28181平台对接·gb28181监控
钢铁男儿14 小时前
深入解析C#参数传递:值参数 vs 引用参数
java·开发语言·c#
tangweiguo0305198715 小时前
Jetpack Compose 响应式布局实战:BoxWithConstraints 完全指南
android