From 3cf0ff4b98a9977c4017ce077bf785b5b7a8c6a9 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Tue, 16 Nov 2021 15:45:14 +0800 Subject: [PATCH] update --- .gitignore | 1 + .vs/VSWorkspaceState.json | 2 +- .vs/slnx.sqlite | Bin 90112 -> 90112 bytes 分表分库.md | 79 +------------------------------------- 4 files changed, 3 insertions(+), 79 deletions(-) diff --git a/.gitignore b/.gitignore index df4c3d4..59de9a8 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ ################################################################################ /.vs/FreeSql.wiki/v17 +/.vs/FreeSql.wiki/project-colors.json diff --git a/.vs/VSWorkspaceState.json b/.vs/VSWorkspaceState.json index 5e2c41d..b355f63 100644 --- a/.vs/VSWorkspaceState.json +++ b/.vs/VSWorkspaceState.json @@ -2,6 +2,6 @@ "ExpandedNodes": [ "" ], - "SelectedNode": "\\查询父子关系.md", + "SelectedNode": "\\修改.md", "PreviewInSolutionExplorer": false } \ No newline at end of file diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite index 30b523a7594fbceaa290d41b198e1dd29d9819cf..9c92248cf169836b0ca6e38a5741b6cf26211802 100644 GIT binary patch delta 2069 zcmZ`)T})eL82(Dj$2pbtXV9Itw9;<;&Cy~J#DFF+D$vpfGEfo|1I3xbM&^zGU8dE@z3>5>Rm&1tIq)C&1U`scH3#5;-V1>hkkH-}U;;hCP=qFaUi$IR z%9^f29tf&P629No5sI9QhJ7E=ZH$kh?I)t4V5%r~;Mj1NQ2??P}Sg$4tREp*(LGLFH8P6%oQnC{4G-JyJYIGp8fL z-HO(u5WJD1T<*^yBnoS6DuBo;>r98iCQ8bVHI+)?dK2{_sx`fhI(Y)YQ#K~FYcg{U z^6v5VpS5{HK7SzCgL&6iqwnMjMj2l(z7p2qGM9=S-a;LOB09qCo~6190y;Iz%x9(P zSz@k&BE){R5(1lmHwxdb-OAs9?vT;^ian` zM!{<+Pkx73b5N|gxsY7>3ac?&QGfpWUHD9a=EJNPCFZA-b4&b7Q&1v2 zeq}G1Iv~mp&u&l6^`Rg`e~M$~EVM_bFC3;L{K`b~yYn~|B5HlePw$q^%S?^TPPAynP3I~gFbKBl zT3wh#u3XHvwBp$eG3#u>vRWAgIjP6vOjH_62>|da37|ZxB-H<^bJc&Te^>vc{yzJL z`ks1DeMx;TdxW*L5*bPdTheNiQStWH+hn~;Zk459H?KinCEN2!^JwISGW;EDCgi#u zraRvJ!CI!=s~Tjpx>!Q>g=$bWsv3%GEx+!|Rmg$NtB{j2PwJ;R_17Jr2!>^ZmrMZi zDVbo2uqA`!*^+Q+2KhMN9_}O?)e0-XT^SWsxDhkOLeUS=m{m;1n0KvHk AjsO4v delta 1745 zcmZux?N3`(7(WGifXZg;n740tEgLT`YYRnu3DX3mgI-!fvuQBKg%x|Jjc{*Q?iPn1 zsF`dq(nNB)@iNCiVQi>{r85g_YWLOn7nqp%rT6yMuYNIpSiJSzYmaQ-o}AzB`906? zIZvL%6Mf=|{wtfVVZq*~ZvdVy=Yxoe)^%ns(PLG{j?VVZj!v($qocd)^=@xhMs^sC zIwtdHyUAG1)V8789+YV^CZUC5AaHc9xf}20@9^vDk5^#$Tf|Cl2 z&P`Dst**TfE1qVBi*athV$(Yiyjo6Km^xIar68-n8LD0TDk0~mwAXpROAB*;>MZ8k z-@=uGQSO3U;P*MBPvYK#;i=2+ARmrIxsQq7&D{_*DUC4Pq!1n_M}oWz?NTeei7O~1 zHZJV<()|VmY}w1|=dOyEG}GLQvyZ$6fm^``;w&3^P7CNS#;&=t4m!24XRu8RCkD-0 zI6r8c#fGcG6vWop@sm-3k6-qLD`(Dn z0IziU2)xVx|F|7)fWW3?`uPc#5VXF4Q~Jj*vYgNxixOC?0fM)c6f`<*p4RS@xgOsN z-&lV%J}D4%YaN#IjrH-Iz dotnet add package IdleBus - -```csharp -static IdleBus ib = new IdleBus(TimeSpan.FromMinutes(10)); - -ib.Register("db1", () => new FreeSqlBuilder().UseConnectionString(DataType.MySql, "str1").Build()); -ib.Register("db2", () => new FreeSqlBuilder().UseConnectionString(DataType.MySql, "str2").Build()); -ib.Register("db3", () => new FreeSqlBuilder().UseConnectionString(DataType.SqlServer, "str3").Build()); -//...注册很多个 - -ib.Get("db1").Select().Limit(10).ToList(); -``` -IdleBus 也是【单例】设计!主要的两个方法,注册,获取。使用 IdleBus 需要弱化 IFreeSql 的存在,每次使用 ib.Get 获取。 - -```csharp -public static class IdleBusExtesions -{ - static AsyncLocal asyncLocalTenantId = new AsyncLocal(); - public static IdleBus ChangeTenant(this IdleBus ib, string tenantId) - { - asyncLocalTenantId.Value = tenantId; - return ib; - } - public static IFreeSql Get(this IdleBus ib) => ib.Get(asyncLocalTenantId.Value ?? "db1"); - public static IBaseRepository GetRepository(this IdleBus ib) where T : class => ib.Get().GetRepository(); - - //------------------------------------------------------- - - static void test() - { - IdleBus ib = null; //单例注入 - - var fsql = ib.Get(); //获取当前租户对应的 IFreeSql - - var fsql00102 = ib.ChangeTenant("00102").Get(); //切换租户,后面的操作都是针对 00102 - - var songRepository = ib.GetRepository(); - var detailRepository = ib.GetRepository(); - } - - //------------------------------------------------------- - - public static IServiceCollection AddIdleBusRepository(this IServiceCollection services, IdleBus ib, params Assembly[] assemblies) - { - services.AddSingleton(ib); - services.AddScoped(typeof(IBaseRepository<>), typeof(YourDefaultRepository<>)); - services.AddScoped(typeof(BaseRepository<>), typeof(YourDefaultRepository<>)); - services.AddScoped(typeof(IBaseRepository<,>), typeof(YourDefaultRepository<,>)); - services.AddScoped(typeof(BaseRepository<,>), typeof(YourDefaultRepository<,>)); - - if (assemblies?.Any() == true) - foreach (var asse in assemblies) //批量注册 - foreach (var repo in asse.GetTypes().Where(a => a.IsAbstract == false && typeof(IBaseRepository).IsAssignableFrom(a))) - services.AddScoped(repo); - return services; - } -} - -class YourDefaultRepository : BaseRepository where T : class -{ - public YourDefaultRepository(IdleBus ib) : base(ib.Get(), null, null) { } -} -class YourDefaultRepository : BaseRepository where T : class -{ - public YourDefaultRepository(IdleBus ib) : base(ib.Get(), null, null) { } -} -``` - 分库总结: -- 跨库 可以使用 ib.Get() 获取 IFreeSql 进行 CRUD; - 跨库 事务不好处理,注意了; - 跨库 查询不好处理,注意了;