From 734e07518260069b089d6bdede6b06caf35ad328 Mon Sep 17 00:00:00 2001 From: xuejiaming <326308290@qq.com> Date: Thu, 13 Oct 2022 20:07:18 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug=E6=97=A0=E6=B3=95?= =?UTF-8?q?=E6=8C=87=E5=AE=9A=E8=BF=81=E7=A7=BB=E5=AF=B9=E8=B1=A1=20[#199]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DbContexts/DefaultShardingDbContext.cs | 5 ----- src/ShardingCore/EFCores/ShardingMigrator.cs | 2 +- src/ShardingCore/Helpers/DynamicShardingHelper.cs | 13 ++++++++----- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/samples/Sample.MySql/DbContexts/DefaultShardingDbContext.cs b/samples/Sample.MySql/DbContexts/DefaultShardingDbContext.cs index d434a23b..fb7eade9 100644 --- a/samples/Sample.MySql/DbContexts/DefaultShardingDbContext.cs +++ b/samples/Sample.MySql/DbContexts/DefaultShardingDbContext.cs @@ -28,11 +28,6 @@ namespace Sample.MySql.DbContexts modelBuilder.ApplyConfiguration(new SysUserModMap()); modelBuilder.ApplyConfiguration(new SysTestMap()); modelBuilder.ApplyConfiguration(new SysUserLogByMonthMap()); - // foreach (var entityType in modelBuilder.Model.GetEntityTypes()) - // { - // _configureGlobalFiltersMethodInfo?.MakeGenericMethod(entityType.ClrType) - // .Invoke(this, new object[] { modelBuilder, entityType }); - // } modelBuilder.Entity().HasData(new SysUserLogByMonth() { Id = "1", Time = DateTime.Now }); modelBuilder.Entity().HasData(new SysTest() { Id = "1", UserId = "123" }); diff --git a/src/ShardingCore/EFCores/ShardingMigrator.cs b/src/ShardingCore/EFCores/ShardingMigrator.cs index 6928d0e1..9c4642f1 100644 --- a/src/ShardingCore/EFCores/ShardingMigrator.cs +++ b/src/ShardingCore/EFCores/ShardingMigrator.cs @@ -78,7 +78,7 @@ namespace ShardingCore.EFCores { var virtualDataSource = _shardingRuntimeContext.GetVirtualDataSource(); var allDataSourceNames = virtualDataSource.GetAllDataSourceNames(); - await DynamicShardingHelper.DynamicMigrateWithDataSourcesAsync(_shardingRuntimeContext, allDataSourceNames, null,cancellationToken); + await DynamicShardingHelper.DynamicMigrateWithDataSourcesAsync(_shardingRuntimeContext, allDataSourceNames, null,targetMigration,cancellationToken); } #if NET6_0 || NET5_0 || NETSTANDARD2_1 diff --git a/src/ShardingCore/Helpers/DynamicShardingHelper.cs b/src/ShardingCore/Helpers/DynamicShardingHelper.cs index 6aae59e4..339b0ac3 100644 --- a/src/ShardingCore/Helpers/DynamicShardingHelper.cs +++ b/src/ShardingCore/Helpers/DynamicShardingHelper.cs @@ -5,6 +5,8 @@ using System.Text; using System.Threading; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; using ShardingCore.Core.DbContextCreator; using ShardingCore.Core.RuntimeContexts; using ShardingCore.Core.VirtualDatabase.VirtualDataSources.PhysicDataSources; @@ -53,7 +55,7 @@ namespace ShardingCore.Helpers } public static async Task DynamicMigrateWithDataSourcesAsync(IShardingRuntimeContext shardingRuntimeContext, - List allDataSourceNames,int? migrationParallelCount,CancellationToken cancellationToken = new CancellationToken()) + List allDataSourceNames,int? migrationParallelCount,string targetMigration = null,CancellationToken cancellationToken = new CancellationToken()) { var dbContextCreator = shardingRuntimeContext.GetDbContextCreator(); var shardingProvider = shardingRuntimeContext.GetShardingProvider(); @@ -74,19 +76,19 @@ namespace ShardingCore.Helpers foreach (var migrationUnits in partitionMigrationUnits) { var migrateUnits = migrationUnits.Select(o =>new MigrateUnit(shellDbContext,o)).ToList(); - await ExecuteMigrateUnitsAsync(shardingRuntimeContext,migrateUnits,cancellationToken); + await ExecuteMigrateUnitsAsync(shardingRuntimeContext,migrateUnits,targetMigration,cancellationToken); } //包含默认默认的单独最后一次处理 if (allDataSourceNames.Contains(defaultDataSourceName)) { - await ExecuteMigrateUnitsAsync(shardingRuntimeContext,new List(){new MigrateUnit(shellDbContext,defaultDataSourceName)},cancellationToken); + await ExecuteMigrateUnitsAsync(shardingRuntimeContext,new List(){new MigrateUnit(shellDbContext,defaultDataSourceName)},targetMigration,cancellationToken); } } } } - private static async Task ExecuteMigrateUnitsAsync(IShardingRuntimeContext shardingRuntimeContext,List migrateUnits,CancellationToken cancellationToken = new CancellationToken()) + private static async Task ExecuteMigrateUnitsAsync(IShardingRuntimeContext shardingRuntimeContext,List migrateUnits,string targetMigration=null,CancellationToken cancellationToken = new CancellationToken()) { var shardingMigrationManager = shardingRuntimeContext.GetShardingMigrationManager(); var dbContextCreator = shardingRuntimeContext.GetDbContextCreator(); @@ -108,7 +110,8 @@ namespace ShardingCore.Helpers { if (( dbContext.Database.GetPendingMigrations()).Any()) { - dbContext.Database.Migrate(); + var migrator = dbContext.GetService(); + migrator.Migrate(targetMigration); } }