优化查询时模型创建判断
This commit is contained in:
parent
0d26648fc3
commit
2a13b37ba4
|
@ -6,7 +6,7 @@
|
|||
---
|
||||
|
||||
<div align="center">
|
||||
<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>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
---
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
本项目迁移参考[efcore.sharding](https://github.com/Coldairarrow/EFCore.Sharding/tree/master/examples/Demo.DbMigrator)
|
||||
本项目迁移参考[efcore.sharding](https://github.com/Coldairarrow/EFCore.Sharding/tree/master/examples/Demo.DbMigrator) 后续会不断完善
|
||||
## 迁移步骤
|
||||
|
||||
1. 执行迁移命令,但不执行更新命令
|
||||
|
|
|
@ -10,5 +10,6 @@ namespace ShardingCore.Core.VirtualRoutes.TableRoutes.RouteTails.Abstractions
|
|||
{
|
||||
string GetRouteTailIdentity();
|
||||
bool IsMultiEntityQuery();
|
||||
bool IsShardingTableQuery();
|
||||
}
|
||||
}
|
|
@ -19,6 +19,7 @@ namespace ShardingCore.Core.VirtualRoutes.TableRoutes.RouteTails
|
|||
private readonly TableRouteResult _tableRouteResult;
|
||||
private readonly string _modelCacheKey;
|
||||
private readonly ISet<Type> _entityTypes;
|
||||
private readonly bool _isShardingTableQuery;
|
||||
|
||||
public MultiQueryRouteTail(TableRouteResult tableRouteResult)
|
||||
{
|
||||
|
@ -26,6 +27,7 @@ namespace ShardingCore.Core.VirtualRoutes.TableRoutes.RouteTails
|
|||
_tableRouteResult = tableRouteResult;
|
||||
_modelCacheKey = RANDOM_MODEL_CACHE_KEY+Guid.NewGuid().ToString("n");
|
||||
_entityTypes = tableRouteResult.ReplaceTables.Select(o=>o.EntityType).ToHashSet();
|
||||
_isShardingTableQuery = _entityTypes.Any(o => o.IsShardingTable());
|
||||
}
|
||||
public string GetRouteTailIdentity()
|
||||
{
|
||||
|
@ -37,6 +39,11 @@ namespace ShardingCore.Core.VirtualRoutes.TableRoutes.RouteTails
|
|||
return true;
|
||||
}
|
||||
|
||||
public bool IsShardingTableQuery()
|
||||
{
|
||||
return _isShardingTableQuery;
|
||||
}
|
||||
|
||||
public string GetEntityTail(Type entityType)
|
||||
{
|
||||
return _tableRouteResult.ReplaceTables.Single(o => o.EntityType == entityType).Tail;
|
||||
|
|
|
@ -17,6 +17,7 @@ namespace ShardingCore.Core.VirtualRoutes.TableRoutes.RouteTails
|
|||
private readonly TableRouteResult _tableRouteResult;
|
||||
private readonly string _tail;
|
||||
private readonly string _modelCacheKey;
|
||||
private readonly bool _isShardingTableQuery;
|
||||
|
||||
public SingleQueryRouteTail(TableRouteResult tableRouteResult)
|
||||
{
|
||||
|
@ -24,12 +25,14 @@ namespace ShardingCore.Core.VirtualRoutes.TableRoutes.RouteTails
|
|||
_tableRouteResult = tableRouteResult;
|
||||
_tail= _tableRouteResult.ReplaceTables.First().Tail;
|
||||
_modelCacheKey = _tail.FormatRouteTail2ModelCacheKey();
|
||||
_isShardingTableQuery = !string.IsNullOrWhiteSpace(_tail);
|
||||
}
|
||||
|
||||
public SingleQueryRouteTail(string tail)
|
||||
{
|
||||
_tail= tail;
|
||||
_modelCacheKey = _tail.FormatRouteTail2ModelCacheKey();
|
||||
_isShardingTableQuery = !string.IsNullOrWhiteSpace(_tail);
|
||||
}
|
||||
public virtual string GetRouteTailIdentity()
|
||||
{
|
||||
|
@ -41,6 +44,11 @@ namespace ShardingCore.Core.VirtualRoutes.TableRoutes.RouteTails
|
|||
return false;
|
||||
}
|
||||
|
||||
public bool IsShardingTableQuery()
|
||||
{
|
||||
return _isShardingTableQuery;
|
||||
}
|
||||
|
||||
public virtual string GetTail()
|
||||
{
|
||||
return _tail;
|
||||
|
|
|
@ -33,7 +33,7 @@ namespace ShardingCore.EFCores
|
|||
public override void Customize(ModelBuilder modelBuilder, DbContext context)
|
||||
{
|
||||
base.Customize(modelBuilder, context);
|
||||
if (context is IShardingTableDbContext shardingTableDbContext)
|
||||
if (context is IShardingTableDbContext shardingTableDbContext&& shardingTableDbContext.RouteTail.IsShardingTableQuery())
|
||||
{
|
||||
var isMultiEntityQuery = shardingTableDbContext.RouteTail.IsMultiEntityQuery();
|
||||
if (!isMultiEntityQuery)
|
||||
|
@ -44,7 +44,7 @@ namespace ShardingCore.EFCores
|
|||
var typeMap = virtualTableManager.GetAllVirtualTables().Where(o => o.GetTableAllTails().Contains(tail)).Select(o => o.EntityType).ToHashSet();
|
||||
|
||||
//设置分表
|
||||
var mutableEntityTypes = modelBuilder.Model.GetEntityTypes().Where(o => o.ClrType.IsShardingTable() && typeMap.Contains(o.ClrType));
|
||||
var mutableEntityTypes = modelBuilder.Model.GetEntityTypes().Where(o => o.ClrType.IsShardingTable() && typeMap.Contains(o.ClrType)).ToArray();
|
||||
foreach (var entityType in mutableEntityTypes)
|
||||
{
|
||||
MappingToTable(entityType.ClrType, modelBuilder, tail);
|
||||
|
|
Loading…
Reference in New Issue