修复非sharding对象不能使用find,发布x.6.0.9
This commit is contained in:
parent
636a643d2c
commit
6cf015a0e6
|
@ -1,9 +1,9 @@
|
||||||
:start
|
:start
|
||||||
::定义版本
|
::定义版本
|
||||||
set EFCORE2=2.6.0.8
|
set EFCORE2=2.6.0.9
|
||||||
set EFCORE3=3.6.0.8
|
set EFCORE3=3.6.0.9
|
||||||
set EFCORE5=5.6.0.8
|
set EFCORE5=5.6.0.9
|
||||||
set EFCORE6=6.6.0.8
|
set EFCORE6=6.6.0.9
|
||||||
|
|
||||||
::删除所有bin与obj下的文件
|
::删除所有bin与obj下的文件
|
||||||
@echo off
|
@echo off
|
||||||
|
|
|
@ -155,16 +155,14 @@ namespace Sample.MySql
|
||||||
using (var scope = app.ApplicationServices.CreateScope())
|
using (var scope = app.ApplicationServices.CreateScope())
|
||||||
{
|
{
|
||||||
var defaultShardingDbContext = scope.ServiceProvider.GetService<DefaultShardingDbContext>();
|
var defaultShardingDbContext = scope.ServiceProvider.GetService<DefaultShardingDbContext>();
|
||||||
if (defaultShardingDbContext.Database.GetPendingMigrations().Any())
|
// if (defaultShardingDbContext.Database.GetPendingMigrations().Any())
|
||||||
{
|
{
|
||||||
defaultShardingDbContext.Database.Migrate();
|
defaultShardingDbContext.Database.Migrate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Stopwatch sp = Stopwatch.StartNew();
|
app.ApplicationServices.UseAutoTryCompensateTable(12);
|
||||||
app.ApplicationServices.UseAutoTryCompensateTable();
|
|
||||||
sp.Stop();
|
|
||||||
Console.WriteLine("UseAutoTryCompensateTable:"+sp.ElapsedMilliseconds);
|
|
||||||
app.UseRouting();
|
app.UseRouting();
|
||||||
|
|
||||||
app.UseAuthorization();
|
app.UseAuthorization();
|
||||||
|
|
|
@ -20,10 +20,12 @@ namespace ShardingCore.Core.ShardingConfigurations
|
||||||
public bool? IgnoreCreateTableError { get; set; } = false;
|
public bool? IgnoreCreateTableError { get; set; } = false;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 配置全局迁移最大并行数,以data source为一个单元并行迁移保证在多数据库分库情况下可以大大提高性能
|
/// 配置全局迁移最大并行数,以data source为一个单元并行迁移保证在多数据库分库情况下可以大大提高性能
|
||||||
|
/// 默认系统逻辑处理器<code>Environment.ProcessorCount</code>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public int MigrationParallelCount { get; set; }= Environment.ProcessorCount;
|
public int MigrationParallelCount { get; set; }= Environment.ProcessorCount;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 启动补偿表的最大并行数,以data source为一个单元并行迁移保证在多数据库分库情况下可以大大提高性能
|
/// 启动补偿表的最大并行数,以data source为一个单元并行迁移保证在多数据库分库情况下可以大大提高性能
|
||||||
|
/// 默认系统逻辑处理器<code>Environment.ProcessorCount</code>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public int CompensateTableParallelCount { get; set; }= Environment.ProcessorCount;
|
public int CompensateTableParallelCount { get; set; }= Environment.ProcessorCount;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -12,6 +12,7 @@ using ShardingCore.Core.EntityMetadatas;
|
||||||
using ShardingCore.Core.RuntimeContexts;
|
using ShardingCore.Core.RuntimeContexts;
|
||||||
using ShardingCore.Core.VirtualDatabase.VirtualDataSources;
|
using ShardingCore.Core.VirtualDatabase.VirtualDataSources;
|
||||||
using ShardingCore.Core.VirtualRoutes.Abstractions;
|
using ShardingCore.Core.VirtualRoutes.Abstractions;
|
||||||
|
using ShardingCore.Exceptions;
|
||||||
using ShardingCore.Extensions;
|
using ShardingCore.Extensions;
|
||||||
using ShardingCore.Utils;
|
using ShardingCore.Utils;
|
||||||
|
|
||||||
|
@ -394,34 +395,51 @@ namespace ShardingCore.EFCores
|
||||||
|
|
||||||
private DbContext GetDbContextByKeyValue(params object[] keyValues)
|
private DbContext GetDbContextByKeyValue(params object[] keyValues)
|
||||||
{
|
{
|
||||||
|
var entityMetadata = EntityMetadataManager.TryGet(typeof(TEntity));
|
||||||
|
if (entityMetadata == null)
|
||||||
|
{
|
||||||
|
throw new ShardingCoreInvalidOperationException(
|
||||||
|
$"cant found type:[{typeof(TEntity)}] in {nameof(IEntityMetadataManager)}");
|
||||||
|
}
|
||||||
|
|
||||||
|
//既不是分表也不是分库的话就是默认对象
|
||||||
|
if (!entityMetadata.IsShardingTable() && !entityMetadata.IsShardingDataSource())
|
||||||
|
{
|
||||||
|
var defaultDataSourceName = _shardingRuntimeContext.GetVirtualDataSource().DefaultDataSourceName;
|
||||||
|
var routeTailFactory = _shardingRuntimeContext.GetRouteTailFactory();
|
||||||
|
var routeTail = routeTailFactory.Create(string.Empty);
|
||||||
|
return _context.GetShareDbContext(defaultDataSourceName, routeTail);
|
||||||
|
}
|
||||||
|
|
||||||
if (keyValues.Length == 1)
|
if (keyValues.Length == 1)
|
||||||
{
|
{
|
||||||
var entityMetadata = EntityMetadataManager.TryGet(typeof(TEntity));
|
|
||||||
|
|
||||||
//单key字段
|
//单key字段
|
||||||
if (null != entityMetadata && entityMetadata.IsSingleKey)
|
if (entityMetadata.IsSingleKey)
|
||||||
{
|
{
|
||||||
var isShardingDataSource = entityMetadata.IsShardingDataSource();
|
var isShardingDataSource = entityMetadata.IsShardingDataSource();
|
||||||
var shardingDataSourceFieldIsKey = entityMetadata.ShardingDataSourceFieldIsKey();
|
var shardingDataSourceFieldIsKey = entityMetadata.ShardingDataSourceFieldIsKey();
|
||||||
if (isShardingDataSource && !shardingDataSourceFieldIsKey)
|
if (isShardingDataSource && !shardingDataSourceFieldIsKey)
|
||||||
return null;
|
{
|
||||||
|
throw new ShardingCoreNotSupportException("multi data source entity find key should sharding value");
|
||||||
|
}
|
||||||
var isShardingTable = entityMetadata.IsShardingTable();
|
var isShardingTable = entityMetadata.IsShardingTable();
|
||||||
var shardingTableFieldIsKey = entityMetadata.ShardingTableFieldIsKey();
|
var shardingTableFieldIsKey = entityMetadata.ShardingTableFieldIsKey();
|
||||||
if (isShardingTable && !shardingTableFieldIsKey)
|
if (isShardingTable && !shardingTableFieldIsKey)
|
||||||
return null;
|
{
|
||||||
|
throw new ShardingCoreNotSupportException("multi table entity find key should sharding value");
|
||||||
|
}
|
||||||
var primaryKeyValue = keyValues[0];
|
var primaryKeyValue = keyValues[0];
|
||||||
if (primaryKeyValue != null)
|
if (primaryKeyValue != null)
|
||||||
{
|
{
|
||||||
var dataSourceName = GetDataSourceName(primaryKeyValue);
|
var dataSourceName = GetDataSourceName(primaryKeyValue);
|
||||||
var tableTail = TableRouteManager.GetTableTail<TEntity>(dataSourceName,primaryKeyValue);
|
var tableTail = TableRouteManager.GetTableTail<TEntity>(dataSourceName, primaryKeyValue);
|
||||||
var routeTail = _shardingRuntimeContext.GetRouteTailFactory().Create(tableTail);
|
var routeTail = _shardingRuntimeContext.GetRouteTailFactory().Create(tableTail);
|
||||||
;
|
|
||||||
return _context.GetShareDbContext(dataSourceName, routeTail);
|
return _context.GetShareDbContext(dataSourceName, routeTail);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
throw new ShardingCoreNotSupportException("sharding entity multi key");
|
||||||
}
|
}
|
||||||
|
|
||||||
private string GetDataSourceName(object shardingKeyValue)
|
private string GetDataSourceName(object shardingKeyValue)
|
||||||
|
|
Loading…
Reference in New Issue