From 13faa67bb83eec999d2211d8ec002171804645ce Mon Sep 17 00:00:00 2001 From: xuejiaming <326308290@qq.com> Date: Sat, 21 Aug 2021 08:51:27 +0800 Subject: [PATCH] 1 --- README.md | 16 ++++---- nuget-publish.bat | 6 +-- samples/Sample.SqlServer/Startup.cs | 38 ++++++++++--------- src/ShardingCore/DIExtension.cs | 2 +- .../Sharding/AbstractShardingDbContext.cs | 2 +- src/ShardingCore/ShardingConfigOption.cs | 19 +++++----- 6 files changed, 44 insertions(+), 39 deletions(-) diff --git a/README.md b/README.md index d05353c7..c4249929 100644 --- a/README.md +++ b/README.md @@ -195,7 +195,7 @@ Oracle | 支持 | 未测试 { op.EnsureCreatedWithOutShardingTable = true; op.CreateShardingTableOnStart = true; - op.UseShardingDbContextOptions((connection, builder) => builder.UseSqlServer(connection).UseLoggerFactory(efLogger)); + op.UseShardingOptionsBuilder((connection, builder) => builder.UseSqlServer(connection).UseLoggerFactory(efLogger)); op.AddShardingTableRoute(); }); @@ -206,9 +206,10 @@ Oracle | 支持 | 未测试 // { // op.EnsureCreatedWithOutShardingTable = true; // op.CreateShardingTableOnStart = true; - // op.UseShardingConnOptions((connection, builder) => builder.UseSqlServer(connection).UseLoggerFactory(efLogger)); - // //不支持mars额外加一条字符串的 - // op.UseShardingConnStrOptions((connstr, builder) => builder.UseSqlServer(connstr).UseLoggerFactory(efLogger)); + // //不支持mars额外加一条字符串的 + // op.UseShardingOptionsBuilder( + // (connection, builder) => builder.UseSqlServer(connection).UseLoggerFactory(efLogger), + // (connString, builder) => builder.UseSqlServer(connString).UseLoggerFactory(efLogger)); // op.AddShardingTableRoute(); // }); } @@ -348,9 +349,10 @@ AbstractSimpleShardingYearKeyLongVirtualTableRoute |按时间戳 |yyyy | `>,>=,< // { // op.EnsureCreatedWithOutShardingTable = true; // op.CreateShardingTableOnStart = true; - // op.UseShardingConnOptions((connection, builder) => builder.UseSqlServer(connection).UseLoggerFactory(efLogger)); - // //不支持mars额外加一条字符串的 - // op.UseShardingConnStrOptions((connstr, builder) => builder.UseSqlServer(connstr).UseLoggerFactory(efLogger)); + // //不支持mars额外加一条字符串的 + // op.UseShardingOptionsBuilder( + // (connection, builder) => builder.UseSqlServer(connection).UseLoggerFactory(efLogger), + // (connString, builder) => builder.UseSqlServer(connString).UseLoggerFactory(efLogger)); // op.AddShardingTableRoute(); // }); ``` diff --git a/nuget-publish.bat b/nuget-publish.bat index 4fe76128..16acf1f9 100644 --- a/nuget-publish.bat +++ b/nuget-publish.bat @@ -1,8 +1,8 @@ :start ::定义版本 -set EFCORE2=2.2.0.04 -set EFCORE3=3.2.0.04 -set EFCORE5=5.2.0.04 +set EFCORE2=2.2.0.05-pre +set EFCORE3=3.2.0.05-pre +set EFCORE5=5.2.0.05-pre ::删除所有bin与obj下的文件 @echo off diff --git a/samples/Sample.SqlServer/Startup.cs b/samples/Sample.SqlServer/Startup.cs index 0ad6ad22..f02785cb 100644 --- a/samples/Sample.SqlServer/Startup.cs +++ b/samples/Sample.SqlServer/Startup.cs @@ -26,24 +26,26 @@ namespace Sample.SqlServer services.AddShardingDbContext( o => o.UseSqlServer("Data Source=localhost;Initial Catalog=ShardingCoreDBxx2;Integrated Security=True;MultipleActiveResultSets=True;") - ,op => - { - op.EnsureCreatedWithOutShardingTable = true; - op.CreateShardingTableOnStart = true; - op.UseShardingConnOptions((connection, builder) => builder.UseSqlServer(connection).UseLoggerFactory(efLogger)); - op.AddShardingTableRoute(); - }); - // //不支持MARS不支持追踪的 - // services.AddShardingDbContext(o => o.UseSqlServer("Data Source=localhost;Initial Catalog=ShardingCoreDBxx2;Integrated Security=True;") - // ,op => - // { - // op.EnsureCreatedWithOutShardingTable = true; - // op.CreateShardingTableOnStart = true; - // op.UseShardingConnOptions((connection, builder) => builder.UseSqlServer(connection).UseLoggerFactory(efLogger)); - // //不支持mars额外加一条字符串的 - // op.UseShardingConnStrOptions((connstr, builder) => builder.UseSqlServer(connstr).UseLoggerFactory(efLogger)); - // op.AddShardingTableRoute(); - // }); + , op => + { + op.EnsureCreatedWithOutShardingTable = true; + op.CreateShardingTableOnStart = true; + op.UseShardingOptionsBuilder((connection, builder) => builder.UseSqlServer(connection).UseLoggerFactory(efLogger)); + op.AddShardingTableRoute(); + }); + ////不支持MARS不支持追踪的 + //services.AddShardingDbContext(o => o.UseSqlServer("Data Source=localhost;Initial Catalog=ShardingCoreDBxx2;Integrated Security=True;") + // , op => + // { + // op.EnsureCreatedWithOutShardingTable = true; + // op.CreateShardingTableOnStart = true; + // //不支持mars额外加一条字符串的 + // op.UseShardingOptionsBuilder( + // (connection, builder) => builder.UseSqlServer(connection).UseLoggerFactory(efLogger), + // (connString, builder) => builder.UseSqlServer(connString).UseLoggerFactory(efLogger)); + + // op.AddShardingTableRoute(); + // }); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. diff --git a/src/ShardingCore/DIExtension.cs b/src/ShardingCore/DIExtension.cs index 690bfcc7..9e67c8a4 100644 --- a/src/ShardingCore/DIExtension.cs +++ b/src/ShardingCore/DIExtension.cs @@ -43,7 +43,7 @@ namespace ShardingCore //添加创建TActualDbContext 的 创建者 - var config = new ShardingDbContextOptionsBuilderConfig(shardingConfigOptions.ShardingDbContextConnectionOptionsCreator,shardingConfigOptions.ShardingDbContextStringOptionsCreator); + var config = new ShardingDbContextOptionsBuilderConfig(shardingConfigOptions.SameConnectionConfigure,shardingConfigOptions.NotSupportMARSConfigure); services.AddSingleton>(sp=> config); //添加创建TActualDbContext创建者 diff --git a/src/ShardingCore/Sharding/AbstractShardingDbContext.cs b/src/ShardingCore/Sharding/AbstractShardingDbContext.cs index f464d609..24ffb66c 100644 --- a/src/ShardingCore/Sharding/AbstractShardingDbContext.cs +++ b/src/ShardingCore/Sharding/AbstractShardingDbContext.cs @@ -100,7 +100,7 @@ namespace ShardingCore.Sharding public DbContext GetDbContext(bool track, string tail) { - if (SupportMARS() || !track) + if (SupportMARS() || track) { if (!_dbContextCaches.TryGetValue(tail, out var dbContext)) { diff --git a/src/ShardingCore/ShardingConfigOption.cs b/src/ShardingCore/ShardingConfigOption.cs index 6efffd6e..a9746452 100644 --- a/src/ShardingCore/ShardingConfigOption.cs +++ b/src/ShardingCore/ShardingConfigOption.cs @@ -25,17 +25,18 @@ namespace ShardingCore { private readonly Dictionary _virtualRoutes = new Dictionary(); - public Action ShardingDbContextConnectionOptionsCreator { get; set; } + public Action SameConnectionConfigure { get; set; } + public Action NotSupportMARSConfigure { get; set; } + /// + /// 配置如何创建对应的dbcontext来操作数据如果数据库支持mars则仅需配置sameConnectionConfigure无需配置notSupportMARSConfigure如果配置了notSupportMARSConfigure则表示数据库不支持MARS则查询将无法正常追踪需要手动attach + /// + /// dbconnection下如何配置 + /// 链接字符串下如何配置 - public void UseShardingConnOptions(Action shardingDbContextOptionsCreator) + public void UseShardingOptionsBuilder(Action sameConnectionConfigure, Action notSupportMARSConfigure = null) { - ShardingDbContextConnectionOptionsCreator = shardingDbContextOptionsCreator ?? throw new ArgumentNullException(nameof(shardingDbContextOptionsCreator)); - } - public Action ShardingDbContextStringOptionsCreator { get; set; } - - public void UseShardingConnStrOptions(Action shardingDbContextOptionsCreator) - { - ShardingDbContextStringOptionsCreator = shardingDbContextOptionsCreator ?? throw new ArgumentNullException(nameof(shardingDbContextOptionsCreator)); + SameConnectionConfigure = sameConnectionConfigure??throw new ArgumentNullException(nameof(sameConnectionConfigure)); + NotSupportMARSConfigure = notSupportMARSConfigure; }