Skip to content

Commit 6cf015a

Browse files
committed
修复非sharding对象不能使用find,发布x.6.0.9
1 parent 636a643 commit 6cf015a

File tree

4 files changed

+35
-17
lines changed

4 files changed

+35
-17
lines changed

nuget-publish.bat

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
:start
22
::定义版本
3-
set EFCORE2=2.6.0.8
4-
set EFCORE3=3.6.0.8
5-
set EFCORE5=5.6.0.8
6-
set EFCORE6=6.6.0.8
3+
set EFCORE2=2.6.0.9
4+
set EFCORE3=3.6.0.9
5+
set EFCORE5=5.6.0.9
6+
set EFCORE6=6.6.0.9
77

88
::删除所有bin与obj下的文件
99
@echo off

samples/Sample.MySql/Startup.cs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -155,16 +155,14 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
155155
using (var scope = app.ApplicationServices.CreateScope())
156156
{
157157
var defaultShardingDbContext = scope.ServiceProvider.GetService<DefaultShardingDbContext>();
158-
if (defaultShardingDbContext.Database.GetPendingMigrations().Any())
158+
// if (defaultShardingDbContext.Database.GetPendingMigrations().Any())
159159
{
160160
defaultShardingDbContext.Database.Migrate();
161161
}
162162
}
163163

164-
Stopwatch sp = Stopwatch.StartNew();
165-
app.ApplicationServices.UseAutoTryCompensateTable();
166-
sp.Stop();
167-
Console.WriteLine("UseAutoTryCompensateTable:"+sp.ElapsedMilliseconds);
164+
app.ApplicationServices.UseAutoTryCompensateTable(12);
165+
168166
app.UseRouting();
169167

170168
app.UseAuthorization();

src/ShardingCore/Core/ShardingConfigurations/ShardingConfigOptions.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,12 @@ public class ShardingConfigOptions
2020
public bool? IgnoreCreateTableError { get; set; } = false;
2121
/// <summary>
2222
/// 配置全局迁移最大并行数,以data source为一个单元并行迁移保证在多数据库分库情况下可以大大提高性能
23+
/// 默认系统逻辑处理器<code>Environment.ProcessorCount</code>
2324
/// </summary>
2425
public int MigrationParallelCount { get; set; }= Environment.ProcessorCount;
2526
/// <summary>
2627
/// 启动补偿表的最大并行数,以data source为一个单元并行迁移保证在多数据库分库情况下可以大大提高性能
28+
/// 默认系统逻辑处理器<code>Environment.ProcessorCount</code>
2729
/// </summary>
2830
public int CompensateTableParallelCount { get; set; }= Environment.ProcessorCount;
2931
/// <summary>

src/ShardingCore/EFCores/ShardingInternalDbSet.cs

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
using ShardingCore.Core.RuntimeContexts;
1313
using ShardingCore.Core.VirtualDatabase.VirtualDataSources;
1414
using ShardingCore.Core.VirtualRoutes.Abstractions;
15+
using ShardingCore.Exceptions;
1516
using ShardingCore.Extensions;
1617
using ShardingCore.Utils;
1718

@@ -394,34 +395,51 @@ public override Task<TEntity> FindAsync(object[] keyValues, CancellationToken ca
394395

395396
private DbContext GetDbContextByKeyValue(params object[] keyValues)
396397
{
397-
if (keyValues.Length == 1)
398+
var entityMetadata = EntityMetadataManager.TryGet(typeof(TEntity));
399+
if (entityMetadata == null)
400+
{
401+
throw new ShardingCoreInvalidOperationException(
402+
$"cant found type:[{typeof(TEntity)}] in {nameof(IEntityMetadataManager)}");
403+
}
404+
405+
//既不是分表也不是分库的话就是默认对象
406+
if (!entityMetadata.IsShardingTable() && !entityMetadata.IsShardingDataSource())
398407
{
399-
var entityMetadata = EntityMetadataManager.TryGet(typeof(TEntity));
408+
var defaultDataSourceName = _shardingRuntimeContext.GetVirtualDataSource().DefaultDataSourceName;
409+
var routeTailFactory = _shardingRuntimeContext.GetRouteTailFactory();
410+
var routeTail = routeTailFactory.Create(string.Empty);
411+
return _context.GetShareDbContext(defaultDataSourceName, routeTail);
412+
}
400413

414+
if (keyValues.Length == 1)
415+
{
401416
//单key字段
402-
if (null != entityMetadata && entityMetadata.IsSingleKey)
417+
if (entityMetadata.IsSingleKey)
403418
{
404419
var isShardingDataSource = entityMetadata.IsShardingDataSource();
405420
var shardingDataSourceFieldIsKey = entityMetadata.ShardingDataSourceFieldIsKey();
406421
if (isShardingDataSource && !shardingDataSourceFieldIsKey)
407-
return null;
422+
{
423+
throw new ShardingCoreNotSupportException("multi data source entity find key should sharding value");
424+
}
408425
var isShardingTable = entityMetadata.IsShardingTable();
409426
var shardingTableFieldIsKey = entityMetadata.ShardingTableFieldIsKey();
410427
if (isShardingTable && !shardingTableFieldIsKey)
411-
return null;
428+
{
429+
throw new ShardingCoreNotSupportException("multi table entity find key should sharding value");
430+
}
412431
var primaryKeyValue = keyValues[0];
413432
if (primaryKeyValue != null)
414433
{
415434
var dataSourceName = GetDataSourceName(primaryKeyValue);
416-
var tableTail = TableRouteManager.GetTableTail<TEntity>(dataSourceName,primaryKeyValue);
435+
var tableTail = TableRouteManager.GetTableTail<TEntity>(dataSourceName, primaryKeyValue);
417436
var routeTail = _shardingRuntimeContext.GetRouteTailFactory().Create(tableTail);
418-
;
419437
return _context.GetShareDbContext(dataSourceName, routeTail);
420438
}
421439
}
422440
}
423441

424-
return null;
442+
throw new ShardingCoreNotSupportException("sharding entity multi key");
425443
}
426444

427445
private string GetDataSourceName(object shardingKeyValue)

0 commit comments

Comments
 (0)