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

复制代码

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
FreeSql是一种高性能免费开源的ORM框架,可以用于在C#中操作关系型数据库。以下是在C#中使用FreeSql的步骤: 1. 安装FreeSql NuGet包 在Visual Studio中打开NuGet包管理器,搜索FreeSql并安装最新版。 2. 配置数据库连接 在App.config或Web.config文件中添加数据库连接字符串,例如: ```xml <connectionStrings> <add name="MySql" connectionString="Server=localhost;Database=mydatabase;User=root;Password=123456;"/> </connectionStrings> ``` 3. 初始化FreeSql 在应用程序启动时,初始化FreeSql并注册数据提供程序,例如: ```csharp // 初始化FreeSql var connectionString = ConfigurationManager.ConnectionStrings["MySql"].ConnectionString; var fsql = new FreeSql.FreeSqlBuilder() .UseConnectionString(FreeSql.DataType.MySql, connectionString) .UseAutoSyncStructure(true) .Build(); // 注册数据提供程序 FreeSql.Provider.Register<CustomMySqlProvider>(FreeSql.DataType.MySql); ``` 4. 编写数据访问代码 使用FreeSql的实体类、仓储类和LINQ语句,编写数据访问代码,例如: ```csharp // 定义实体类 public class User { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } } // 定义仓储类 public class UserRepository : FreeSqlRepository<User> { public UserRepository() : base() { } public UserRepository(UnitOfWorkManager uowm) : base(uowm) { } } // 使用LINQ语句查询数据 var users = fsql.Select<User>().Where(u => u.Age > 18).ToList(); // 使用仓储类查询数据 var userRepo = new UserRepository(); var user = userRepo.Where(u => u.Name == "Tom").FirstOrDefault(); // 使用事务提交数据 using (var uow = fsql.CreateUnitOfWork()) { var userRepo = uow.GetRepository<User>(); userRepo.Insert(new User { Name = "Jack", Age = 20 }); userRepo.Update(new User { Id = 1, Name = "Tom", Age = 22 }); uow.Commit(); } ``` 以上就是在C#中使用FreeSql的基本步骤,可以根据实际情况进行调整和优化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值