Skip to content

Commit be1ce43

Browse files
committed
支持IShardingRuntimeContext<TDbContext>接口注入,支持多dbcontext分片的处理,修复多次AddShardingDbContext后导致的只有最后一个生效的bug,发布6.8.0.2
1 parent 048b148 commit be1ce43

File tree

7 files changed

+32
-17
lines changed

7 files changed

+32
-17
lines changed

samples/Sample.BulkConsole/Program.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,16 @@ static void Main(string[] args)
8989

9090
var b = DateTime.Now.Date.AddDays(-3);
9191
var queryable = myShardingDbContext.Set<Order>().Select(o=>new {Id=o.Id,OrderNo=o.OrderNo, CreateTime =o.CreateTime });//.Where(o => o.CreateTime >= b);
92-
92+
var dateTime = DateTime.Now;
93+
var dbContexts = myShardingDbContext.BulkShardingTableExpression<MyShardingDbContext,Order>(o=>o.CreateTime<=dateTime);
94+
using (var dbContextTransaction = myShardingDbContext.Database.BeginTransaction())
95+
{
96+
foreach (var dbContext in dbContexts)
97+
{
98+
dbContext.Set<Order>().Where(o=>o.CreateTime<=dateTime).BatchUpdate(a => new Order { OrderNo = "12345" });
99+
}
100+
dbContextTransaction.Commit();
101+
}
93102
var startNew1 = Stopwatch.StartNew();
94103

95104

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
using ShardingCore.Sharding.Abstractions;
2+
3+
namespace ShardingCore.Core.RuntimeContexts;
4+
5+
public interface IShardingRuntimeContext<TDbContext>:IShardingRuntimeContext where TDbContext:IShardingDbContext
6+
{
7+
8+
}

src/ShardingCore/Core/RuntimeContexts/ShardingRuntimeContext.cs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131

3232
namespace ShardingCore.Core.RuntimeContexts
3333
{
34-
public sealed class ShardingRuntimeContext : IShardingRuntimeContext
34+
public sealed class ShardingRuntimeContext<TDbContext> : IShardingRuntimeContext<TDbContext> where TDbContext:IShardingDbContext
3535
{
3636
private bool isInited = false;
3737
private object INIT_LOCK = new object();
@@ -42,12 +42,9 @@ public sealed class ShardingRuntimeContext : IShardingRuntimeContext
4242
private IServiceCollection _serviceMap = new ServiceCollection();
4343

4444
private IServiceProvider _serviceProvider;
45-
public Type DbContextType { get; }
46-
// private ILoggerFactory _applicationLoggerFactory;
47-
public ShardingRuntimeContext(Type dbContextType)
48-
{
49-
DbContextType = dbContextType;
50-
}
45+
46+
public Type DbContextType => typeof(TDbContext);
47+
5148

5249
public void AddServiceConfig(Action<IServiceCollection> configure)
5350
{

src/ShardingCore/Core/ShardingConfigurations/ConfigBuilders/ShardingCoreConfigBuilder.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,11 +79,12 @@ public ShardingCoreConfigBuilder<TShardingDbContext> ReplaceService<TService, TI
7979
[Obsolete("plz use AddShardingCore")]
8080
public void EnsureConfig()
8181
{
82-
_services.AddSingleton<IShardingRuntimeContext>(sp => _shardingRuntimeBuilder.Build(sp));
82+
AddShardingCore();
8383
}
8484
public void AddShardingCore()
8585
{
86-
_services.AddSingleton<IShardingRuntimeContext>(sp => _shardingRuntimeBuilder.Build(sp));
86+
_services.AddSingleton<IShardingRuntimeContext<TShardingDbContext>>(sp => _shardingRuntimeBuilder.Build(sp));
87+
_services.AddSingleton<IShardingRuntimeContext>(sp => sp.GetService<IShardingRuntimeContext<TShardingDbContext>>());
8788
}
8889

8990
}

src/ShardingCore/ShardingCoreExtension.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,14 +106,14 @@ public static ShardingCoreConfigBuilder<TShardingDbContext> AddShardingConfigure
106106
public static void UseDefaultSharding<TShardingDbContext>(this DbContextOptionsBuilder dbContextOptionsBuilder,
107107
IServiceProvider serviceProvider) where TShardingDbContext : DbContext, IShardingDbContext
108108
{
109-
var shardingRuntimeContext = serviceProvider.GetRequiredService<IShardingRuntimeContext>();
109+
var shardingRuntimeContext = serviceProvider.GetRequiredService<IShardingRuntimeContext<TShardingDbContext>>();
110110
dbContextOptionsBuilder.UseDefaultSharding<TShardingDbContext>(shardingRuntimeContext);
111111
}
112112

113113
public static void UseDefaultSharding<TShardingDbContext>(IServiceProvider serviceProvider,
114114
DbContextOptionsBuilder dbContextOptionsBuilder) where TShardingDbContext : DbContext, IShardingDbContext
115115
{
116-
var shardingRuntimeContext = serviceProvider.GetRequiredService<IShardingRuntimeContext>();
116+
var shardingRuntimeContext = serviceProvider.GetRequiredService<IShardingRuntimeContext<TShardingDbContext>>();
117117
dbContextOptionsBuilder.UseDefaultSharding<TShardingDbContext>(shardingRuntimeContext);
118118
}
119119

src/ShardingCore/ShardingRuntimeBuilder.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,18 +71,18 @@ public ShardingRuntimeBuilder<TShardingDbContext> ReplaceService<TService, TImpl
7171
return this;
7272
}
7373

74-
public IShardingRuntimeContext Build()
74+
public IShardingRuntimeContext<TShardingDbContext> Build()
7575
{
7676
return Build(null);
7777
}
78-
public IShardingRuntimeContext Build(IServiceProvider appServiceProvider)
78+
public IShardingRuntimeContext<TShardingDbContext> Build(IServiceProvider appServiceProvider)
7979
{
8080
return Build(appServiceProvider, appServiceProvider?.GetService<ILoggerFactory>());
8181
}
8282

83-
public IShardingRuntimeContext Build(IServiceProvider appServiceProvider, ILoggerFactory loggerFactory)
83+
public IShardingRuntimeContext<TShardingDbContext> Build(IServiceProvider appServiceProvider, ILoggerFactory loggerFactory)
8484
{
85-
var shardingRuntimeContext = new ShardingRuntimeContext(typeof(TShardingDbContext));
85+
var shardingRuntimeContext = new ShardingRuntimeContext<TShardingDbContext>();
8686
shardingRuntimeContext.AddServiceConfig(services =>
8787
{
8888
// services.AddSingleton<IDbContextTypeCollector>(sp => new DbContextTypeCollector<TShardingDbContext>());

test/ShardingCore.Test/ShardingTest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,12 +174,12 @@ public async Task GenericTest()
174174

175175
await _virtualDbContext.AddRangeAsync(logDays);
176176
var bulkShardingExpression = _virtualDbContext.BulkShardingExpression<ShardingDefaultDbContext, Order>(o => new[] { "A", "B" }.Contains(o.Area));
177+
177178
Assert.Equal(2, bulkShardingExpression.Count);
178179
Assert.True(bulkShardingExpression.ContainsKey("A"));
179180
Assert.True(bulkShardingExpression.ContainsKey("B"));
180181

181182
var bulkShardingTableExpression = _virtualDbContext.BulkShardingTableExpression<ShardingDefaultDbContext, SysUserMod>(o => o.Id == Guid.NewGuid().ToString());
182-
183183
Assert.Equal(1, bulkShardingTableExpression.Count());
184184

185185
var noShardingExpression = _virtualDbContext.BulkShardingExpression<ShardingDefaultDbContext, LogNoSharding>(o => o.Id == "123");

0 commit comments

Comments
 (0)