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; }
}
}
}
C#FreeSql分库分表
CHHC18802023-09-08 23:32
相关推荐
IT技术分享社区14 分钟前
C#实战:使用腾讯云识别服务轻松提取火车票信息顾北川_野35 分钟前
Android CALL关于电话音频和紧急电话设置和获取&岁月不待人&1 小时前
Kotlin by lazy和lateinit的使用及区别Winston Wood3 小时前
Android Parcelable和Serializable的区别与联系清风徐来辽3 小时前
Android 项目模型配置管理帅得不敢出门3 小时前
Gradle命令编译Android Studio工程项目并签名problc4 小时前
Flutter中文字体设置指南:打造个性化的应用体验△曉風殘月〆7 小时前
WPF MVVM入门系列教程(二、依赖属性)逐·風9 小时前
unity关于自定义渲染、内存管理、性能调优、复杂物理模拟、并行计算以及插件开发m0_6569747412 小时前
C#中的集合类及其使用