33using System . Linq ;
44using ShardingCore . Core . EntityMetadatas ;
55using ShardingCore . Core . VirtualRoutes . Abstractions ;
6+ using ShardingCore . Core . VirtualRoutes . DataSourceRoutes . RouteRuleEngine ;
67using ShardingCore . Extensions ;
78using ShardingCore . Sharding . MergeEngines . Common ;
89using 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