修复手动路由下2个以上的tail只生效一个并且发布x.3.1.41
This commit is contained in:
parent
38ee1a7c18
commit
f65e2a7ae3
|
@ -1,9 +1,9 @@
|
|||
:start
|
||||
::定义版本
|
||||
set EFCORE2=2.3.1.39
|
||||
set EFCORE3=3.3.1.39
|
||||
set EFCORE5=5.3.1.39
|
||||
set EFCORE6=6.3.1.39
|
||||
set EFCORE2=2.3.1.41
|
||||
set EFCORE3=3.3.1.41
|
||||
set EFCORE5=5.3.1.41
|
||||
set EFCORE6=6.3.1.41
|
||||
|
||||
::删除所有bin与obj下的文件
|
||||
@echo off
|
||||
|
|
|
@ -104,7 +104,7 @@ namespace ShardingCore.Core.EntityMetadatas
|
|||
if (null == EntityType || null == PrimaryKeyProperties || null == VirtualTableName ||
|
||||
(!IsMultiTableMapping && !IsMultiDataSourceMapping))
|
||||
{
|
||||
throw new ShardingCoreException($"no found entity:{EntityType} configure");
|
||||
throw new ShardingCoreException($"not found entity:{EntityType} configure");
|
||||
}
|
||||
}
|
||||
protected bool Equals(EntityMetadata other)
|
||||
|
|
|
@ -96,17 +96,7 @@ namespace ShardingCore.Extensions
|
|||
return ShardingUtil.GetQueryEntitiesFilter(queryable);
|
||||
}
|
||||
|
||||
public static T IfDo<T>(this T t, bool @if,Func<T,T> build)
|
||||
{
|
||||
if (@if)
|
||||
{
|
||||
return build(t);
|
||||
}
|
||||
|
||||
return t;
|
||||
}
|
||||
|
||||
|
||||
public static Type GetSequenceType(this Type type)
|
||||
{
|
||||
var sequenceType = TryGetSequenceType(type);
|
||||
|
|
|
@ -1,54 +0,0 @@
|
|||
using System;
|
||||
|
||||
namespace ShardingCore.Extensions
|
||||
{
|
||||
/*
|
||||
* @Author: xjm
|
||||
* @Description:
|
||||
* @Date: Saturday, 02 January 2021 13:10:30
|
||||
* @Email: 326308290@qq.com
|
||||
*/
|
||||
public static class DateTimeExtension
|
||||
{
|
||||
#region 13位时间戳
|
||||
|
||||
/// <summary>
|
||||
/// 将DateTime时间格式转换为本地时间戳格式
|
||||
/// </summary>
|
||||
/// Author : Napoleon
|
||||
/// Created : 2018/4/8 14:19
|
||||
public static long ConvertTimeToLong(this DateTime time)
|
||||
{
|
||||
var start = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
|
||||
return (long) (time.AddHours(-8) - start).TotalMilliseconds;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 本地时间戳转为C#格式时间
|
||||
/// </summary>
|
||||
/// Author : Napoleon
|
||||
/// Created : 2018/4/8 14:19
|
||||
public static DateTime ConvertLongToTime(this long timeStamp)
|
||||
{
|
||||
var start = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
|
||||
return start.AddMilliseconds(timeStamp).AddHours(8);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 获取周一
|
||||
/// </summary>
|
||||
/// <param name="dateTime"></param>
|
||||
/// <returns></returns>
|
||||
public static DateTime GetMonday(this DateTime dateTime)
|
||||
{
|
||||
DateTime temp = new DateTime(dateTime.Year, dateTime.Month, dateTime.Day);
|
||||
int count = dateTime.DayOfWeek - DayOfWeek.Monday;
|
||||
if (count == -1) count = 6;
|
||||
var monday = temp.AddDays(-count);
|
||||
return monday;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -15,16 +15,6 @@ namespace ShardingCore.Extensions.InternalExtensions
|
|||
*/
|
||||
internal static class InternalLinqExtension
|
||||
{
|
||||
public static IEnumerable<TShource> OrderByIf<TShource, TKey>(this IEnumerable<TShource> source, Func<TShource, TKey> keySelector, bool condition,
|
||||
IComparer<TKey>? comparer)
|
||||
{
|
||||
return condition ? source.OrderBy(keySelector, comparer) : source;
|
||||
}
|
||||
public static IEnumerable<TShource> OrderByDescendingIf<TShource, TKey>(this IEnumerable<TShource> source, Func<TShource, TKey> keySelector, bool condition,
|
||||
IComparer<TKey>? comparer)
|
||||
{
|
||||
return condition ? source.OrderByDescending(keySelector, comparer) : source;
|
||||
}
|
||||
public static IOrderedEnumerable<TShource> ThenByIf<TShource, TKey>(this IOrderedEnumerable<TShource> source, Func<TShource, TKey> keySelector, bool condition,
|
||||
IComparer<TKey>? comparer)
|
||||
{
|
||||
|
|
|
@ -51,7 +51,7 @@ namespace ShardingCore.Extensions
|
|||
shardingRouteContext.MustDataSource.Add(entityType, mustDataSources);
|
||||
}
|
||||
|
||||
return dataSources.Select(o => mustDataSources.Add(o)).Any(o => o);
|
||||
return dataSources.Select(o => mustDataSources.Add(o)).All(o => o);
|
||||
}
|
||||
/// <summary>
|
||||
/// 创建或者添加提示路由
|
||||
|
@ -86,7 +86,7 @@ namespace ShardingCore.Extensions
|
|||
shardingRouteContext.HintDataSource.Add(entityType, hintDataSources);
|
||||
}
|
||||
|
||||
return dataSources.Select(o => hintDataSources.Add(o)).Any(o => o);
|
||||
return dataSources.Select(o => hintDataSources.Add(o)).All(o => o);
|
||||
}
|
||||
/// <summary>
|
||||
/// 创建或者添加断言
|
||||
|
|
|
@ -51,7 +51,7 @@ namespace ShardingCore.Extensions
|
|||
shardingRouteContext.MustTable.Add(entityType, mustTails);
|
||||
}
|
||||
|
||||
return tails.Select(o => mustTails.Add(o)).Any(o => o);
|
||||
return tails.Select(o => mustTails.Add(o)).All(o => o);
|
||||
}
|
||||
/// <summary>
|
||||
/// 创建或者添加提示路由
|
||||
|
@ -86,7 +86,7 @@ namespace ShardingCore.Extensions
|
|||
shardingRouteContext.HintTable.Add(entityType, hintTails);
|
||||
}
|
||||
|
||||
return tails.Select(o => hintTails.Add(o)).Any(o => o);
|
||||
return tails.Select(o => hintTails.Add(o)).All(o => o);
|
||||
}
|
||||
/// <summary>
|
||||
/// 创建或者添加断言
|
||||
|
|
|
@ -59,7 +59,7 @@ namespace ShardingCore.Extensions
|
|||
return metadata.IsMultiDataSourceMapping;
|
||||
}
|
||||
/// <summary>
|
||||
/// 是否基继承至IShardingTable
|
||||
/// 是否是分表
|
||||
/// </summary>
|
||||
/// <param name="metadata"></param>
|
||||
/// <returns></returns>
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace ShardingCore.Test6x.Domain.Entities
|
||||
{
|
||||
public class LogDay
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public string LogLevel { get; set; }
|
||||
public string LogBody { get; set; }
|
||||
public DateTime LogTime { get; set; }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
||||
using ShardingCore.Test6x.Domain.Entities;
|
||||
|
||||
namespace ShardingCore.Test6x.Domain.Maps
|
||||
{
|
||||
public class LogDayMap:IEntityTypeConfiguration<LogDay>
|
||||
{
|
||||
public void Configure(EntityTypeBuilder<LogDay> builder)
|
||||
{
|
||||
builder.HasKey(o => o.Id);
|
||||
builder.Property(o => o.LogLevel).IsRequired().IsUnicode(false).HasMaxLength(32);
|
||||
builder.Property(o => o.LogBody).IsRequired().HasMaxLength(256);
|
||||
builder.ToTable(nameof(LogDay));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -25,6 +25,7 @@ namespace ShardingCore.Test6x
|
|||
modelBuilder.ApplyConfiguration(new SysUserModMap());
|
||||
modelBuilder.ApplyConfiguration(new SysUserSalaryMap());
|
||||
modelBuilder.ApplyConfiguration(new OrderMap());
|
||||
modelBuilder.ApplyConfiguration(new LogDayMap());
|
||||
}
|
||||
|
||||
public IRouteTail RouteTail { get; set; }
|
||||
|
|
|
@ -1,12 +1,16 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using ShardingCore.Core.EntityMetadatas;
|
||||
using ShardingCore.Core.PhysicTables;
|
||||
using ShardingCore.Core.QueryRouteManagers.Abstractions;
|
||||
using ShardingCore.Core.VirtualDatabase.VirtualDataSources;
|
||||
using ShardingCore.Core.VirtualDatabase.VirtualDataSources.PhysicDataSources;
|
||||
using ShardingCore.Core.VirtualDatabase.VirtualTables;
|
||||
using ShardingCore.Extensions;
|
||||
using ShardingCore.Extensions.ShardingPageExtensions;
|
||||
using ShardingCore.Sharding.Abstractions;
|
||||
|
@ -31,9 +35,12 @@ namespace ShardingCore.Test6x
|
|||
private readonly IEntityMetadataManager<ShardingDefaultDbContext> _entityMetadataManager;
|
||||
private readonly IShardingComparer<ShardingDefaultDbContext> _shardingComparer;
|
||||
private readonly IVirtualDataSource<ShardingDefaultDbContext> _virtualDataSource;
|
||||
private readonly IVirtualTableManager<ShardingDefaultDbContext> _virtualTableManager;
|
||||
|
||||
public ShardingTest(ShardingDefaultDbContext virtualDbContext,IShardingRouteManager shardingRouteManager, IConnectionStringManager<ShardingDefaultDbContext> connectionStringManager,IConfiguration configuration,
|
||||
IEntityMetadataManager<ShardingDefaultDbContext> entityMetadataManager,IShardingComparer<ShardingDefaultDbContext> shardingComparer,IVirtualDataSource<ShardingDefaultDbContext> virtualDataSource)
|
||||
IEntityMetadataManager<ShardingDefaultDbContext> entityMetadataManager,
|
||||
IShardingComparer<ShardingDefaultDbContext> shardingComparer,IVirtualDataSource<ShardingDefaultDbContext> virtualDataSource,
|
||||
IVirtualTableManager<ShardingDefaultDbContext> virtualTableManager)
|
||||
{
|
||||
_virtualDbContext = virtualDbContext;
|
||||
_shardingRouteManager = shardingRouteManager;
|
||||
|
@ -42,6 +49,28 @@ namespace ShardingCore.Test6x
|
|||
this._entityMetadataManager = entityMetadataManager;
|
||||
_shardingComparer = shardingComparer;
|
||||
_virtualDataSource = virtualDataSource;
|
||||
_virtualTableManager = virtualTableManager;
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GenericTest()
|
||||
{
|
||||
var a = new DefaultPhysicDataSource("aaa","aaa",true);
|
||||
var b = new DefaultPhysicDataSource("aaa","aaa1",false);
|
||||
Assert.Equal(a,b);
|
||||
var x = new EntityMetadata(typeof(LogDay),"aa",typeof(ShardingDefaultDbContext),new List<PropertyInfo>());
|
||||
var y = new EntityMetadata(typeof(LogDay),"aa1",typeof(ShardingDefaultDbContext),new List<PropertyInfo>());
|
||||
Assert.Equal(x, y);
|
||||
var dateTime = new DateTime(2021,1,1);
|
||||
var logDays = Enumerable.Range(0,100).Select(o=>new LogDay(){Id = Guid.NewGuid(),LogLevel = "info",LogBody = o.ToString(),LogTime = dateTime.AddDays(o)}).ToList();
|
||||
var bulkShardingTableEnumerable = _virtualDbContext.BulkShardingTableEnumerable(logDays);
|
||||
Assert.Equal(100, bulkShardingTableEnumerable.Count);
|
||||
var bulkShardingEnumerable = _virtualDbContext.BulkShardingEnumerable(logDays);
|
||||
Assert.Equal(1, bulkShardingEnumerable.Count);
|
||||
foreach (var (key, value) in bulkShardingEnumerable)
|
||||
{
|
||||
Assert.Equal(100, value.Count);
|
||||
}
|
||||
}
|
||||
[Fact]
|
||||
public void TestEntityMetadataManager()
|
||||
|
@ -503,6 +532,54 @@ namespace ShardingCore.Test6x
|
|||
j--;
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task LogDayCountTest()
|
||||
{
|
||||
var countAsync = await _virtualDbContext.Set<LogDay>().CountAsync();
|
||||
Assert.Equal(3000,countAsync);
|
||||
var fourBegin = new DateTime(2021, 4, 1).Date;
|
||||
var fiveBegin = new DateTime(2021, 5, 1).Date;
|
||||
var fourCount = await _virtualDbContext.Set<LogDay>().Where(o => o.LogTime >= fourBegin && o.LogTime < fiveBegin).CountAsync();
|
||||
Assert.Equal(300, fourCount);
|
||||
using (_shardingRouteManager.CreateScope())
|
||||
{
|
||||
_shardingRouteManager.Current.TryCreateOrAddMustTail<LogDay>("20210102");
|
||||
var countAsync1 = await _virtualDbContext.Set<LogDay>().CountAsync();
|
||||
Assert.Equal(10, countAsync1);
|
||||
}
|
||||
Assert.Null(_shardingRouteManager.Current);
|
||||
using (_shardingRouteManager.CreateScope())
|
||||
{
|
||||
_shardingRouteManager.Current.TryCreateOrAddHintTail<LogDay>("20210103", "20210104");
|
||||
var countAsync2 = await _virtualDbContext.Set<LogDay>().CountAsync();
|
||||
Assert.Equal(20, countAsync2);
|
||||
}
|
||||
}
|
||||
[Fact]
|
||||
public void LogDayTableSeparatorTest()
|
||||
{
|
||||
var virtualTable = _virtualTableManager.GetVirtualTable(typeof(LogDay));
|
||||
var virtualTableName = virtualTable.GetVirtualTableName();
|
||||
Assert.Equal(nameof(LogDay),virtualTableName);
|
||||
var table = _virtualTableManager.GetVirtualTable(virtualTableName);
|
||||
var tryGetVirtualTable = _virtualTableManager.TryGetVirtualTable(typeof(LogDay));
|
||||
Assert.NotNull(tryGetVirtualTable);
|
||||
var tryGetVirtualTable1 = _virtualTableManager.TryGetVirtualTable(virtualTableName);
|
||||
Assert.NotNull(tryGetVirtualTable1);
|
||||
|
||||
var all = virtualTable.GetAllPhysicTables().All(o=>string.IsNullOrWhiteSpace(o.TableSeparator));
|
||||
Assert.True(all);
|
||||
var entityMetadata = _entityMetadataManager.TryGet<LogDay>();
|
||||
Assert.NotNull(entityMetadata);
|
||||
var isShardingTable = entityMetadata.IsShardingTable();
|
||||
Assert.True(isShardingTable);
|
||||
var isShardingDataSource = entityMetadata.IsShardingDataSource();
|
||||
Assert.False(isShardingDataSource);
|
||||
var emptySeparator = string.IsNullOrWhiteSpace(entityMetadata.TableSeparator);
|
||||
Assert.True(emptySeparator);
|
||||
Assert.Null(entityMetadata.AutoCreateDataSourceTable);
|
||||
}
|
||||
// [Fact]
|
||||
// public async Task Group_API_Test()
|
||||
// {
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using ShardingCore.Core.EntityMetadatas;
|
||||
using ShardingCore.Test6x.Domain.Entities;
|
||||
using ShardingCore.VirtualRoutes.Days;
|
||||
|
||||
namespace ShardingCore.Test6x.Shardings
|
||||
{
|
||||
public class LogDayVirtualTableRoute:AbstractSimpleShardingDayKeyDateTimeVirtualTableRoute<LogDay>
|
||||
{
|
||||
protected override bool EnableHintRoute => true;
|
||||
|
||||
public override DateTime GetBeginTime()
|
||||
{
|
||||
return new DateTime(2021, 1, 1);
|
||||
}
|
||||
|
||||
public override bool StartJob()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public override void Configure(EntityMetadataTableBuilder<LogDay> builder)
|
||||
{
|
||||
builder.ShardingProperty(o => o.LogTime);
|
||||
builder.TableSeparator(string.Empty);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -71,6 +71,7 @@ namespace ShardingCore.Test6x
|
|||
op.AddShardingTableRoute<SysUserModVirtualTableRoute>();
|
||||
op.AddShardingTableRoute<SysUserSalaryVirtualTableRoute>();
|
||||
op.AddShardingTableRoute<OrderCreateTimeVirtualTableRoute>();
|
||||
op.AddShardingTableRoute<LogDayVirtualTableRoute>();
|
||||
}).End();
|
||||
// services.AddShardingDbContext<ShardingDefaultDbContext, DefaultDbContext>(o => o.UseMySql(hostBuilderContext.Configuration.GetSection("MySql")["ConnectionString"],new MySqlServerVersion("5.7.15"))
|
||||
// ,op =>
|
||||
|
@ -141,7 +142,7 @@ namespace ShardingCore.Test6x
|
|||
}
|
||||
|
||||
var areas = new List<string>(){"A","B","C"};
|
||||
List<Order> orders = new List<Order>();
|
||||
List<Order> orders = new List<Order>(360);
|
||||
var begin = new DateTime(2021, 1, 1);
|
||||
for (int i = 0; i < 360; i++)
|
||||
{
|
||||
|
@ -155,11 +156,33 @@ namespace ShardingCore.Test6x
|
|||
begin = begin.AddDays(1);
|
||||
}
|
||||
|
||||
List<LogDay> logDays = new List<LogDay>(3600);
|
||||
|
||||
var levels = new List<string>(){"info","warning","error"};
|
||||
var begin1 = new DateTime(2021, 1, 1);
|
||||
for (int i = 0; i < 300; i++)
|
||||
{
|
||||
var ltime = begin1;
|
||||
for (int j = 0; j < 10; j++)
|
||||
{
|
||||
logDays.Add(new LogDay()
|
||||
{
|
||||
Id = Guid.NewGuid(),
|
||||
LogLevel = levels[j%3],
|
||||
LogBody = $"{i}_{j}",
|
||||
LogTime = ltime.AddHours(1)
|
||||
});
|
||||
ltime = ltime.AddHours(1);
|
||||
}
|
||||
begin1 = begin1.AddDays(1);
|
||||
}
|
||||
|
||||
using (var tran = virtualDbContext.Database.BeginTransaction())
|
||||
{
|
||||
await virtualDbContext.AddRangeAsync(userMods);
|
||||
await virtualDbContext.AddRangeAsync(userSalaries);
|
||||
await virtualDbContext.AddRangeAsync(orders);
|
||||
await virtualDbContext.AddRangeAsync(logDays);
|
||||
|
||||
await virtualDbContext.SaveChangesAsync();
|
||||
tran.Commit();
|
||||
|
|
Loading…
Reference in New Issue