Skip to content

Commit 42914f8

Browse files
committed
添加分配和未分片的测试
1 parent 04d85c9 commit 42914f8

File tree

5 files changed

+140
-4
lines changed

5 files changed

+140
-4
lines changed

samples/Sample.MySql/Controllers/WeatherForecastController.cs

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,13 +61,14 @@ public RateLimitAttribute(int limitCount = 1)
6161
[Route("[controller]/[action]")]
6262
public class WeatherForecastController : ControllerBase
6363
{
64-
64+
private readonly UnShardingDbContext _unShardingDbContext;
6565
private readonly DefaultShardingDbContext _defaultTableDbContext;
6666
private readonly IShardingRuntimeContext _shardingRuntimeContext;
6767
private readonly ABC _abc;
6868

69-
public WeatherForecastController(DefaultShardingDbContext defaultTableDbContext,IShardingRuntimeContext shardingRuntimeContext)
69+
public WeatherForecastController(UnShardingDbContext unShardingDbContext,DefaultShardingDbContext defaultTableDbContext,IShardingRuntimeContext shardingRuntimeContext)
7070
{
71+
_unShardingDbContext = unShardingDbContext;
7172
_defaultTableDbContext = defaultTableDbContext;
7273
_shardingRuntimeContext = shardingRuntimeContext;
7374
_abc=new ABC(_defaultTableDbContext);
@@ -383,5 +384,41 @@ public async Task<IActionResult> Get13()
383384
}).ToListAsync();
384385
return Ok();
385386
}
387+
388+
389+
[HttpGet]
390+
public async Task<IActionResult> Get14()
391+
{
392+
var sysUserLogByMonths = new List<SysUserLogByMonth>();
393+
for (int i = 0; i < 100; i++)
394+
{
395+
var sysUserLogByMonth = new SysUserLogByMonth();
396+
sysUserLogByMonth.Id = Guid.NewGuid().ToString("n");
397+
sysUserLogByMonth.Time=DateTime.Now;
398+
sysUserLogByMonths.Add(sysUserLogByMonth);
399+
}
400+
401+
await _defaultTableDbContext.AddRangeAsync(sysUserLogByMonths);
402+
await _defaultTableDbContext.SaveChangesAsync();
403+
return Ok();
404+
}
405+
406+
407+
[HttpGet]
408+
public async Task<IActionResult> Get15()
409+
{
410+
var sysUserLogByMonths = new List<SysUserLogByMonth>();
411+
for (int i = 0; i < 100; i++)
412+
{
413+
var sysUserLogByMonth = new SysUserLogByMonth();
414+
sysUserLogByMonth.Id = Guid.NewGuid().ToString("n");
415+
sysUserLogByMonth.Time=DateTime.Now;
416+
sysUserLogByMonths.Add(sysUserLogByMonth);
417+
}
418+
419+
await _unShardingDbContext.AddRangeAsync(sysUserLogByMonths);
420+
await _unShardingDbContext.SaveChangesAsync();
421+
return Ok();
422+
}
386423
}
387424
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
using Microsoft.EntityFrameworkCore;
2+
using Sample.MySql.Domain.Maps;
3+
4+
namespace Sample.MySql.DbContexts
5+
{
6+
7+
public class UnShardingDbContext:DbContext
8+
{
9+
public UnShardingDbContext(DbContextOptions<UnShardingDbContext> options):base(options)
10+
{
11+
12+
}
13+
14+
protected override void OnModelCreating(ModelBuilder modelBuilder)
15+
{
16+
base.OnModelCreating(modelBuilder);
17+
modelBuilder.ApplyConfiguration(new SysUserLogByMonthMap());
18+
}
19+
}
20+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
namespace Sample.MySql.Domain.Entities
2+
{
3+
public class RangeOrder
4+
{
5+
public long OrderId { get; set; }
6+
public string OrderNo { get; set; }
7+
}
8+
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
using Sample.MySql.Domain.Entities;
2+
using ShardingCore.Core.EntityMetadatas;
3+
using ShardingCore.Core.VirtualRoutes;
4+
using ShardingCore.Core.VirtualRoutes.TableRoutes.Abstractions;
5+
6+
namespace Sample.MySql.Shardings
7+
{
8+
public class RangeOrderTableRoute : AbstractShardingOperatorVirtualTableRoute<RangeOrder, long>
9+
{
10+
public override string ShardingKeyToTail(object shardingKey)
11+
{
12+
//取商
13+
var value = ((long)shardingKey) / (1000 * 10000);
14+
return value.ToString().PadLeft(4, '0'); //左补零 range_order_0000 range_order_0001 range_order_0002
15+
}
16+
17+
public override List<string> GetTails()
18+
{
19+
//查询拨号器现在是多少位
20+
long nextId = 0;
21+
var id = nextId / (1000 * 10000);
22+
var tails = new List<string>();
23+
for (int i = 0; i <= id; i++)
24+
{
25+
var tail = i.ToString().PadLeft(4, '0');
26+
tails.Add(tail);
27+
}
28+
29+
return tails;
30+
}
31+
32+
public override void Configure(EntityMetadataTableBuilder<RangeOrder> builder)
33+
{
34+
builder.ShardingProperty(o => o.OrderId);
35+
}
36+
37+
public override Func<string, bool> GetRouteToFilter(long shardingKey, ShardingOperatorEnum shardingOperator)
38+
{
39+
//当前值是对应表后缀多少
40+
var t = ShardingKeyToTail(shardingKey);
41+
switch (shardingOperator)
42+
{
43+
case ShardingOperatorEnum.GreaterThan:
44+
case ShardingOperatorEnum.GreaterThanOrEqual:
45+
return tail => String.Compare(tail, t, StringComparison.Ordinal) >= 0;
46+
case ShardingOperatorEnum.LessThan:
47+
{
48+
return tail => String.Compare(tail, t, StringComparison.Ordinal) <= 0;
49+
}
50+
case ShardingOperatorEnum.LessThanOrEqual:
51+
return tail => String.Compare(tail, t, StringComparison.Ordinal) <= 0;
52+
case ShardingOperatorEnum.Equal: return tail => tail == t;
53+
default:
54+
{
55+
return tail => true;
56+
}
57+
}
58+
}
59+
}
60+
}

samples/Sample.MySql/Startup.cs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,10 @@ public void ConfigureServices(IServiceCollection services)
7070
// });
7171
//
7272

73-
73+
services.AddDbContext<UnShardingDbContext>(o =>
74+
o.UseMySql(
75+
"server=127.0.0.1;port=3306;database=dbdbdxx;userid=root;password=root;",new MySqlServerVersion(
76+
new Version())));
7477
services.AddShardingDbContext<DefaultShardingDbContext>()
7578
.UseRouteConfig((sp, o) =>
7679
{
@@ -186,7 +189,15 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
186189
app.UseDeveloperExceptionPage();
187190
}
188191
app.ApplicationServices.UseAutoTryCompensateTable();
189-
192+
using (var scope = app.ApplicationServices.CreateScope())
193+
{
194+
var unShardingDbContext = scope.ServiceProvider.GetService<UnShardingDbContext>();
195+
unShardingDbContext.Database.EnsureCreated();
196+
// var shardingRuntimeContext = defaultShardingDbContext.GetShardingRuntimeContext();
197+
// var tableRouteManager = shardingRuntimeContext.GetTableRouteManager();
198+
// var virtualTableRoute = (SysUserLogByMonthRoute)tableRouteManager.GetRoute(typeof(SysUserLogByMonth));
199+
// virtualTableRoute.Append("2021");
200+
}
190201
// var shardingRuntimeContext = app.ApplicationServices.GetRequiredService<IShardingRuntimeContext>();
191202
// var entityMetadataManager = shardingRuntimeContext.GetEntityMetadataManager();
192203
// var entityMetadata = entityMetadataManager.TryGet<SysUserMod>();

0 commit comments

Comments
 (0)