Skip to content

Commit 9d80a3b

Browse files
committed
修复仅分库的对象查询bug
1 parent 94b99ff commit 9d80a3b

File tree

4 files changed

+35
-12
lines changed

4 files changed

+35
-12
lines changed

nuget-publish.bat

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
:start
22
::定义版本
3-
set EFCORE2=2.6.0.29
4-
set EFCORE3=3.6.0.29
5-
set EFCORE5=5.6.0.29
6-
set EFCORE6=6.6.0.29
3+
set EFCORE2=2.6.0.30
4+
set EFCORE3=3.6.0.30
5+
set EFCORE5=5.6.0.30
6+
set EFCORE6=6.6.0.30
77

88
::删除所有bin与obj下的文件
99
@echo off

samples/Sample.SqlServerShardingDataSource/Startup.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
8080
{
8181
endpoints.MapControllers();
8282
});
83-
//app.InitSeed();
83+
app.InitSeed();
8484
}
8585
}
8686
}

samples/Sample.SqlServerShardingDataSource/VirtualRoutes/OrderVirtualDataSourceRoute.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,18 @@
66
using ShardingCore.Core.EntityMetadatas;
77
using ShardingCore.Core.VirtualRoutes;
88
using ShardingCore.Core.VirtualRoutes.DataSourceRoutes.Abstractions;
9+
using ShardingCore.Helpers;
910

1011
namespace Sample.SqlServerShardingDataSource.VirtualRoutes
1112
{
1213
public class OrderVirtualDataSourceRoute : AbstractShardingOperatorVirtualDataSourceRoute<Order, string>
1314
{
14-
private readonly List<string> _dataSources = Enumerable.Range(0,100).Select(o=>(o % 100).ToString().PadLeft(2,'0')).ToList();
15+
private readonly List<string> _dataSources = Enumerable.Range(0,4).Select(o=>(o % 100).ToString().PadLeft(2,'0')).ToList();
1516
//我们设置区域就是数据库
1617
public override string ShardingKeyToDataSourceName(object shardingKey)
1718
{
18-
return shardingKey?.ToString() ?? string.Empty;
19+
var shardingKeyToDataSourceName = Math.Abs(ShardingCoreHelper.GetStringHashCode(shardingKey?.ToString() ?? string.Empty) % 4).ToString().PadLeft(2, '0');
20+
return shardingKeyToDataSourceName;
1921
}
2022

2123
public override List<string> GetAllDataSourceNames()
@@ -47,7 +49,7 @@ public override Func<string, bool> GetRouteToFilter(string shardingKey, Sharding
4749

4850
public override void Configure(EntityMetadataDataSourceBuilder<Order> builder)
4951
{
50-
builder.ShardingProperty(o => o.Area);
52+
builder.ShardingProperty(o => o.Id);
5153
}
5254
}
5355
}

src/ShardingCore/Core/VirtualRoutes/TableRoutes/RoutingRuleEngine/TableRouteRuleEngine.cs

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,32 @@ public ShardingRouteResult Route(TableRouteRuleContext tableRouteRuleContext)
3939
{
4040
var shardingEntity = shardingEntityKv.Key;
4141
if (!_entityMetadataManager.IsShardingTable(shardingEntity))
42+
{
43+
var dataSourceNames = tableRouteRuleContext.DataSourceRouteResult.IntersectDataSources;
44+
foreach (var dataSourceName in dataSourceNames)
45+
{
46+
var shardingRouteUnit = new TableRouteUnit(dataSourceName, string.Empty, shardingEntity);
47+
if (!routeMaps.ContainsKey(dataSourceName))
48+
{
49+
routeMaps.Add(dataSourceName,
50+
new Dictionary<Type, ISet<TableRouteUnit>>()
51+
{ { shardingEntity, new HashSet<TableRouteUnit>() { shardingRouteUnit } } });
52+
}
53+
else
54+
{
55+
var routeMap = routeMaps[dataSourceName];
56+
if (!routeMap.ContainsKey(shardingEntity))
57+
{
58+
routeMap.Add(shardingEntity, new HashSet<TableRouteUnit>() { shardingRouteUnit });
59+
}
60+
else
61+
{
62+
routeMap[shardingEntity].Add(shardingRouteUnit);
63+
}
64+
}
65+
}
4266
continue;
67+
}
4368
var virtualTableRoute = _tableRouteManager.GetRoute(shardingEntity);
4469
var shardingRouteUnits = virtualTableRoute.RouteWithPredicate(
4570
tableRouteRuleContext.DataSourceRouteResult,
@@ -107,10 +132,6 @@ public ShardingRouteResult Route(TableRouteRuleContext tableRouteRuleContext)
107132
}
108133
}
109134
}
110-
else
111-
{
112-
routeMaps.Add(dataSourceName,new Dictionary<Type, ISet<TableRouteUnit>>());
113-
}
114135
}
115136

116137
return new ShardingRouteResult(sqlRouteUnits, sqlRouteUnits.Count == 0, dataSourceCount > 1, isCrossTable,

0 commit comments

Comments
 (0)