diff --git a/src/ShardingCore/Helpers/MigrationHelper.cs b/src/ShardingCore/Helpers/MigrationHelper.cs index 38213f78..437780cd 100644 --- a/src/ShardingCore/Helpers/MigrationHelper.cs +++ b/src/ShardingCore/Helpers/MigrationHelper.cs @@ -1,6 +1,7 @@ using System; using System.Collections; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Reflection; using System.Text; @@ -25,6 +26,7 @@ namespace ShardingCore.Helpers /// /// https://github.com/Coldairarrow/EFCore.Sharding/blob/master/src/EFCore.Sharding/Migrations/MigrationHelper.cs /// + [ExcludeFromCodeCoverage] public class MigrationHelper { private MigrationHelper() { } diff --git a/test/ShardingCore.Test/Domain/Entities/SysUserModInt.cs b/test/ShardingCore.Test/Domain/Entities/SysUserModInt.cs new file mode 100644 index 00000000..a77b9d4c --- /dev/null +++ b/test/ShardingCore.Test/Domain/Entities/SysUserModInt.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ShardingCore.Test.Domain.Entities +{ + public class SysUserModInt + { + /// + /// 用户Id用于分表 + /// + public int Id { get; set; } + /// + /// 用户名称 + /// + public string Name { get; set; } + /// + /// 用户姓名 + /// + public int Age { get; set; } + public int AgeGroup { get; set; } + } +} diff --git a/test/ShardingCore.Test/Domain/Maps/SysUserModIntMap.cs b/test/ShardingCore.Test/Domain/Maps/SysUserModIntMap.cs new file mode 100644 index 00000000..79da8daf --- /dev/null +++ b/test/ShardingCore.Test/Domain/Maps/SysUserModIntMap.cs @@ -0,0 +1,23 @@ +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.Test.Domain.Entities; + +namespace ShardingCore.Test.Domain.Maps +{ + public class SysUserModIntMap:IEntityTypeConfiguration + { + public void Configure(EntityTypeBuilder builder) + { + + builder.HasKey(o => o.Id); + builder.Property(o => o.Id).ValueGeneratedNever(); + builder.Property(o => o.Name).HasMaxLength(128); + builder.ToTable(nameof(SysUserModInt)); + } + } +} diff --git a/test/ShardingCore.Test/ShardingDefaultDbContext.cs b/test/ShardingCore.Test/ShardingDefaultDbContext.cs index 90ba3e99..16a267aa 100644 --- a/test/ShardingCore.Test/ShardingDefaultDbContext.cs +++ b/test/ShardingCore.Test/ShardingDefaultDbContext.cs @@ -32,6 +32,7 @@ namespace ShardingCore.Test modelBuilder.ApplyConfiguration(new LogNoShardingMap()); modelBuilder.ApplyConfiguration(new LogMonthLongMap()); modelBuilder.ApplyConfiguration(new LogYearLongMap()); + modelBuilder.ApplyConfiguration(new SysUserModIntMap()); } public IRouteTail RouteTail { get; set; } diff --git a/test/ShardingCore.Test/ShardingTest.cs b/test/ShardingCore.Test/ShardingTest.cs index c01142c6..94089dbe 100644 --- a/test/ShardingCore.Test/ShardingTest.cs +++ b/test/ShardingCore.Test/ShardingTest.cs @@ -1270,6 +1270,73 @@ namespace ShardingCore.Test await _virtualDbContext.SaveChangesAsync(); } + + + + [Fact] + public async Task Int_ToList_All_Route_Test() + { + using (_shardingRouteManager.CreateScope()) + { + _shardingRouteManager.Current.TryCreateOrAddMustTail("00"); + + var mod00s = await _virtualDbContext.Set().ToListAsync(); + Assert.Equal(333, mod00s.Count); + } + var mods = await _virtualDbContext.Set().ToListAsync(); + Assert.Equal(1000, mods.Count); + + var modOrders1 = await _virtualDbContext.Set().OrderBy(o => o.Age).ToListAsync(); + int ascAge = 1; + foreach (var sysUserMod in modOrders1) + { + Assert.Equal(ascAge, sysUserMod.Age); + ascAge++; + } + + + var modOrders2 = await _virtualDbContext.Set().OrderByDescending(o => o.Age).ToListAsync(); + int descAge = 1000; + foreach (var sysUserMod in modOrders2) + { + Assert.Equal(descAge, sysUserMod.Age); + descAge--; + } + } + [Fact] + public async Task Int_ToList_All_Test() + { + + var mods = await _virtualDbContext.Set().ToListAsync(); + Assert.Equal(1000, mods.Count); + + var modOrders1 = await _virtualDbContext.Set().OrderBy(o => o.Age).ToListAsync(); + int ascAge = 1; + foreach (var sysUserMod in modOrders1) + { + Assert.Equal(ascAge, sysUserMod.Age); + ascAge++; + } + + var modOrders2 = await _virtualDbContext.Set().OrderByDescending(o => o.Age).ToListAsync(); + int descAge = 1000; + foreach (var sysUserMod in modOrders2) + { + Assert.Equal(descAge, sysUserMod.Age); + descAge--; + } + + + + var pageResult = await _virtualDbContext.Set().Skip(10).Take(10).OrderByDescending(o => o.Age).ToListAsync(); + Assert.Equal(10, pageResult.Count); + int pageDescAge = 990; + foreach (var sysUserMod in pageResult) + { + Assert.Equal(pageDescAge, sysUserMod.Age); + pageDescAge--; + } + } // [Fact] // public async Task Group_API_Test() // { diff --git a/test/ShardingCore.Test/ShardingTestSync.cs b/test/ShardingCore.Test/ShardingTestSync.cs index dfd0f886..13cf7a11 100644 --- a/test/ShardingCore.Test/ShardingTestSync.cs +++ b/test/ShardingCore.Test/ShardingTestSync.cs @@ -1217,6 +1217,72 @@ namespace ShardingCore.Test } } } + + + [Fact] + public void Int_ToList_All_Route_Test() + { + using (_shardingRouteManager.CreateScope()) + { + _shardingRouteManager.Current.TryCreateOrAddMustTail("00"); + + var mod00s = _virtualDbContext.Set().ToList(); + Assert.Equal(333, mod00s.Count); + } + var mods = _virtualDbContext.Set().ToList(); + Assert.Equal(1000, mods.Count); + + var modOrders1 = _virtualDbContext.Set().OrderBy(o => o.Age).ToList(); + int ascAge = 1; + foreach (var sysUserMod in modOrders1) + { + Assert.Equal(ascAge, sysUserMod.Age); + ascAge++; + } + + + var modOrders2 = _virtualDbContext.Set().OrderByDescending(o => o.Age).ToList(); + int descAge = 1000; + foreach (var sysUserMod in modOrders2) + { + Assert.Equal(descAge, sysUserMod.Age); + descAge--; + } + } + [Fact] + public void Int_ToList_All_Test() + { + + var mods = _virtualDbContext.Set().ToList(); + Assert.Equal(1000, mods.Count); + + var modOrders1 = _virtualDbContext.Set().OrderBy(o => o.Age).ToList(); + int ascAge = 1; + foreach (var sysUserMod in modOrders1) + { + Assert.Equal(ascAge, sysUserMod.Age); + ascAge++; + } + + var modOrders2 = _virtualDbContext.Set().OrderByDescending(o => o.Age).ToList(); + int descAge = 1000; + foreach (var sysUserMod in modOrders2) + { + Assert.Equal(descAge, sysUserMod.Age); + descAge--; + } + + + + var pageResult = _virtualDbContext.Set().Skip(10).Take(10).OrderByDescending(o => o.Age).ToList(); + Assert.Equal(10, pageResult.Count); + int pageDescAge = 990; + foreach (var sysUserMod in pageResult) + { + Assert.Equal(pageDescAge, sysUserMod.Age); + pageDescAge--; + } + } // [Fact] // public void Group_API_Test() // { diff --git a/test/ShardingCore.Test/Shardings/SysUserModIntVirtualRoute.cs b/test/ShardingCore.Test/Shardings/SysUserModIntVirtualRoute.cs new file mode 100644 index 00000000..5cdb0fc5 --- /dev/null +++ b/test/ShardingCore.Test/Shardings/SysUserModIntVirtualRoute.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ShardingCore.Core.EntityMetadatas; +using ShardingCore.Test.Domain.Entities; +using ShardingCore.VirtualRoutes.Mods; + +namespace ShardingCore.Test.Shardings +{ + public class SysUserModIntVirtualRoute:AbstractSimpleShardingModKeyIntVirtualTableRoute + { + protected override bool EnableHintRoute => true; + + public SysUserModIntVirtualRoute() : base(2, 3) + { + } + + public override void Configure(EntityMetadataTableBuilder builder) + { + builder.ShardingProperty(o => o.Id); + } + } +} diff --git a/test/ShardingCore.Test/Startup.cs b/test/ShardingCore.Test/Startup.cs index adb2ae30..735b14ca 100644 --- a/test/ShardingCore.Test/Startup.cs +++ b/test/ShardingCore.Test/Startup.cs @@ -70,6 +70,7 @@ namespace ShardingCore.Test op.AddShardingTableRoute(); op.AddShardingTableRoute(); op.AddShardingTableRoute(); + op.AddShardingTableRoute(); }).AddReadWriteSeparation(sp => { return new Dictionary>() @@ -117,6 +118,7 @@ namespace ShardingCore.Test { var ids = Enumerable.Range(1, 1000); var userMods = new List(); + var userModInts = new List(); var userSalaries = new List(); var beginTime = new DateTime(2020, 1, 1); var endTime = new DateTime(2021, 12, 1); @@ -129,6 +131,13 @@ namespace ShardingCore.Test Name = $"name_{id}", AgeGroup = Math.Abs(id % 10) }); + userModInts.Add(new SysUserModInt() + { + Id = id, + Age = id, + Name = $"name_{id}", + AgeGroup = Math.Abs(id % 10) + }); var tempTime = beginTime; var i = 0; while (tempTime <= endTime) @@ -252,6 +261,7 @@ namespace ShardingCore.Test using (var tran = virtualDbContext.Database.BeginTransaction()) { await virtualDbContext.AddRangeAsync(userMods); + await virtualDbContext.AddRangeAsync(userModInts); await virtualDbContext.AddRangeAsync(userSalaries); await virtualDbContext.AddRangeAsync(orders); await virtualDbContext.AddRangeAsync(logDays); diff --git a/test/ShardingCore.Test2x/ShardingTestSync.cs b/test/ShardingCore.Test2x/ShardingTestSync.cs index 650cf872..693c2eaf 100644 --- a/test/ShardingCore.Test2x/ShardingTestSync.cs +++ b/test/ShardingCore.Test2x/ShardingTestSync.cs @@ -1009,6 +1009,9 @@ namespace ShardingCore.Test2x Assert.Equal(10, page1.Data.Count); Assert.Equal(31, page1.Total); } + + + // [Fact] // public void Group_API_Test() // {