Skip to content

Commit 2a13b37

Browse files
committed
优化查询时模型创建判断
1 parent 0d26648 commit 2a13b37

File tree

6 files changed

+20
-4
lines changed

6 files changed

+20
-4
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
---
77

88
<div align="center">
9-
<p> <a href="https://github.com/xuejmnet/sharding-core">Github Star</a> 助力dotnet 生态 <a href="https://gitee.com/dotnetchina/sharding-core">Gitee Star</a> </p>
9+
<p> <a href="https://gitee.com/dotnetchina/sharding-core">Gitee Star</a> 助力dotnet 生态 <a href="https://github.com/xuejmnet/sharding-core">Github Star</a> </p>
1010
</div>
1111

1212
---

samples/Sample.Migrations/readme.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
本项目迁移参考[efcore.sharding](https://github.com/Coldairarrow/EFCore.Sharding/tree/master/examples/Demo.DbMigrator)
1+
本项目迁移参考[efcore.sharding](https://github.com/Coldairarrow/EFCore.Sharding/tree/master/examples/Demo.DbMigrator) 后续会不断完善
22
## 迁移步骤
33

44
1. 执行迁移命令,但不执行更新命令

src/ShardingCore/Core/VirtualRoutes/TableRoutes/RouteTails/Abstractions/IRouteTail.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,6 @@ public interface IRouteTail
1010
{
1111
string GetRouteTailIdentity();
1212
bool IsMultiEntityQuery();
13+
bool IsShardingTableQuery();
1314
}
1415
}

src/ShardingCore/Core/VirtualRoutes/TableRoutes/RouteTails/MultiQueryRouteTail.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,15 @@ public class MultiQueryRouteTail:IMultiQueryRouteTail
1919
private readonly TableRouteResult _tableRouteResult;
2020
private readonly string _modelCacheKey;
2121
private readonly ISet<Type> _entityTypes;
22+
private readonly bool _isShardingTableQuery;
2223

2324
public MultiQueryRouteTail(TableRouteResult tableRouteResult)
2425
{
2526
if (tableRouteResult.ReplaceTables.IsEmpty() || tableRouteResult.ReplaceTables.Count <= 1) throw new ArgumentException("route result replace tables must greater than 1");
2627
_tableRouteResult = tableRouteResult;
2728
_modelCacheKey = RANDOM_MODEL_CACHE_KEY+Guid.NewGuid().ToString("n");
2829
_entityTypes = tableRouteResult.ReplaceTables.Select(o=>o.EntityType).ToHashSet();
30+
_isShardingTableQuery = _entityTypes.Any(o => o.IsShardingTable());
2931
}
3032
public string GetRouteTailIdentity()
3133
{
@@ -37,6 +39,11 @@ public bool IsMultiEntityQuery()
3739
return true;
3840
}
3941

42+
public bool IsShardingTableQuery()
43+
{
44+
return _isShardingTableQuery;
45+
}
46+
4047
public string GetEntityTail(Type entityType)
4148
{
4249
return _tableRouteResult.ReplaceTables.Single(o => o.EntityType == entityType).Tail;

src/ShardingCore/Core/VirtualRoutes/TableRoutes/RouteTails/SingleQueryRouteTail.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,22 @@ public class SingleQueryRouteTail:ISingleQueryRouteTail
1717
private readonly TableRouteResult _tableRouteResult;
1818
private readonly string _tail;
1919
private readonly string _modelCacheKey;
20+
private readonly bool _isShardingTableQuery;
2021

2122
public SingleQueryRouteTail(TableRouteResult tableRouteResult)
2223
{
2324
if (tableRouteResult.ReplaceTables.IsEmpty() || tableRouteResult.ReplaceTables.Count > 1) throw new ArgumentException("route result replace tables must 1");
2425
_tableRouteResult = tableRouteResult;
2526
_tail= _tableRouteResult.ReplaceTables.First().Tail;
2627
_modelCacheKey = _tail.FormatRouteTail2ModelCacheKey();
28+
_isShardingTableQuery = !string.IsNullOrWhiteSpace(_tail);
2729
}
2830

2931
public SingleQueryRouteTail(string tail)
3032
{
3133
_tail= tail;
3234
_modelCacheKey = _tail.FormatRouteTail2ModelCacheKey();
35+
_isShardingTableQuery = !string.IsNullOrWhiteSpace(_tail);
3336
}
3437
public virtual string GetRouteTailIdentity()
3538
{
@@ -41,6 +44,11 @@ public virtual bool IsMultiEntityQuery()
4144
return false;
4245
}
4346

47+
public bool IsShardingTableQuery()
48+
{
49+
return _isShardingTableQuery;
50+
}
51+
4452
public virtual string GetTail()
4553
{
4654
return _tail;

src/ShardingCore/EFCores/ShardingModelCustomizer.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public ShardingModelCustomizer(ModelCustomizerDependencies dependencies) : base(
3333
public override void Customize(ModelBuilder modelBuilder, DbContext context)
3434
{
3535
base.Customize(modelBuilder, context);
36-
if (context is IShardingTableDbContext shardingTableDbContext)
36+
if (context is IShardingTableDbContext shardingTableDbContext&& shardingTableDbContext.RouteTail.IsShardingTableQuery())
3737
{
3838
var isMultiEntityQuery = shardingTableDbContext.RouteTail.IsMultiEntityQuery();
3939
if (!isMultiEntityQuery)
@@ -44,7 +44,7 @@ public override void Customize(ModelBuilder modelBuilder, DbContext context)
4444
var typeMap = virtualTableManager.GetAllVirtualTables().Where(o => o.GetTableAllTails().Contains(tail)).Select(o => o.EntityType).ToHashSet();
4545

4646
//设置分表
47-
var mutableEntityTypes = modelBuilder.Model.GetEntityTypes().Where(o => o.ClrType.IsShardingTable() && typeMap.Contains(o.ClrType));
47+
var mutableEntityTypes = modelBuilder.Model.GetEntityTypes().Where(o => o.ClrType.IsShardingTable() && typeMap.Contains(o.ClrType)).ToArray();
4848
foreach (var entityType in mutableEntityTypes)
4949
{
5050
MappingToTable(entityType.ClrType, modelBuilder, tail);

0 commit comments

Comments
 (0)