Skip to content

Commit 36d8709

Browse files
committed
优化代码tableengine
1 parent 9d80a3b commit 36d8709

File tree

1 file changed

+21
-31
lines changed

1 file changed

+21
-31
lines changed

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

Lines changed: 21 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System.Linq;
44
using ShardingCore.Core.EntityMetadatas;
55
using ShardingCore.Core.VirtualRoutes.Abstractions;
6+
using ShardingCore.Core.VirtualRoutes.DataSourceRoutes.RouteRuleEngine;
67
using ShardingCore.Extensions;
78
using ShardingCore.Sharding.MergeEngines.Common;
89
using ShardingCore.Sharding.MergeEngines.Common.Abstractions;
@@ -28,6 +29,22 @@ public TableRouteRuleEngine(ITableRouteManager tableRouteManager,
2829
_entityMetadataManager = entityMetadataManager;
2930
}
3031

32+
private List<TableRouteUnit> GetEntityRouteUnit(DataSourceRouteResult dataSourceRouteResult,Type shardingEntity,IQueryable queryable)
33+
{
34+
if (!_entityMetadataManager.IsShardingTable(shardingEntity))
35+
{
36+
var dataSourceNames = dataSourceRouteResult.IntersectDataSources;
37+
var tableRouteUnits = new List<TableRouteUnit>(dataSourceNames.Count);
38+
foreach (var dataSourceName in dataSourceNames)
39+
{
40+
var shardingRouteUnit = new TableRouteUnit(dataSourceName, string.Empty, shardingEntity);
41+
tableRouteUnits.Add(shardingRouteUnit);
42+
}
43+
return tableRouteUnits;
44+
}
45+
var virtualTableRoute = _tableRouteManager.GetRoute(shardingEntity);
46+
return virtualTableRoute.RouteWithPredicate(dataSourceRouteResult, queryable, true);
47+
}
3148
public ShardingRouteResult Route(TableRouteRuleContext tableRouteRuleContext)
3249
{
3350
Dictionary<string /*dataSourceName*/, Dictionary<Type /*entityType*/, ISet<TableRouteUnit>>> routeMaps =
@@ -38,41 +55,13 @@ public ShardingRouteResult Route(TableRouteRuleContext tableRouteRuleContext)
3855
foreach (var shardingEntityKv in queryEntities)
3956
{
4057
var shardingEntity = shardingEntityKv.Key;
41-
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-
}
66-
continue;
67-
}
68-
var virtualTableRoute = _tableRouteManager.GetRoute(shardingEntity);
69-
var shardingRouteUnits = virtualTableRoute.RouteWithPredicate(
70-
tableRouteRuleContext.DataSourceRouteResult,
71-
(shardingEntityKv.Value ?? tableRouteRuleContext.Queryable), true);
58+
var shardingRouteUnits = GetEntityRouteUnit(tableRouteRuleContext.DataSourceRouteResult,shardingEntity, shardingEntityKv.Value ?? tableRouteRuleContext.Queryable);
59+
7260
foreach (var shardingRouteUnit in shardingRouteUnits)
7361
{
7462
var dataSourceName = shardingRouteUnit.DataSourceName;
7563

64+
7665
if (!routeMaps.ContainsKey(dataSourceName))
7766
{
7867
routeMaps.Add(dataSourceName,
@@ -148,5 +137,6 @@ public ShardingRouteResult Route(TableRouteRuleContext tableRouteRuleContext)
148137
// return sqlRouteUnits;
149138
// return routeMaps.Select(o => o.Value).Cartesian().Where(o=>o).Select(o => new TableRouteResult(o,_shardingDatabaseProvider.GetShardingDbContextType()));
150139
}
140+
151141
}
152142
}

0 commit comments

Comments
 (0)