Skip to content

Commit 734e075

Browse files
committed
修复bug无法指定迁移对象 [#199]
1 parent 860e6dd commit 734e075

File tree

3 files changed

+9
-11
lines changed

3 files changed

+9
-11
lines changed

samples/Sample.MySql/DbContexts/DefaultShardingDbContext.cs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,6 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
2828
modelBuilder.ApplyConfiguration(new SysUserModMap());
2929
modelBuilder.ApplyConfiguration(new SysTestMap());
3030
modelBuilder.ApplyConfiguration(new SysUserLogByMonthMap());
31-
// foreach (var entityType in modelBuilder.Model.GetEntityTypes())
32-
// {
33-
// _configureGlobalFiltersMethodInfo?.MakeGenericMethod(entityType.ClrType)
34-
// .Invoke(this, new object[] { modelBuilder, entityType });
35-
// }
3631

3732
modelBuilder.Entity<SysUserLogByMonth>().HasData(new SysUserLogByMonth() { Id = "1", Time = DateTime.Now });
3833
modelBuilder.Entity<SysTest>().HasData(new SysTest() { Id = "1", UserId = "123" });

src/ShardingCore/EFCores/ShardingMigrator.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ public override void Migrate(string targetMigration = null)
7878
{
7979
var virtualDataSource = _shardingRuntimeContext.GetVirtualDataSource();
8080
var allDataSourceNames = virtualDataSource.GetAllDataSourceNames();
81-
await DynamicShardingHelper.DynamicMigrateWithDataSourcesAsync(_shardingRuntimeContext, allDataSourceNames, null,cancellationToken);
81+
await DynamicShardingHelper.DynamicMigrateWithDataSourcesAsync(_shardingRuntimeContext, allDataSourceNames, null,targetMigration,cancellationToken);
8282

8383
}
8484
#if NET6_0 || NET5_0 || NETSTANDARD2_1

src/ShardingCore/Helpers/DynamicShardingHelper.cs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
using System.Threading;
66
using System.Threading.Tasks;
77
using Microsoft.EntityFrameworkCore;
8+
using Microsoft.EntityFrameworkCore.Infrastructure;
9+
using Microsoft.EntityFrameworkCore.Migrations;
810
using ShardingCore.Core.DbContextCreator;
911
using ShardingCore.Core.RuntimeContexts;
1012
using ShardingCore.Core.VirtualDatabase.VirtualDataSources.PhysicDataSources;
@@ -53,7 +55,7 @@ public static void DynamicAppendDataSourceOnly(IShardingRuntimeContext shardingR
5355
}
5456

5557
public static async Task DynamicMigrateWithDataSourcesAsync(IShardingRuntimeContext shardingRuntimeContext,
56-
List<string> allDataSourceNames,int? migrationParallelCount,CancellationToken cancellationToken = new CancellationToken())
58+
List<string> allDataSourceNames,int? migrationParallelCount,string targetMigration = null,CancellationToken cancellationToken = new CancellationToken())
5759
{
5860
var dbContextCreator = shardingRuntimeContext.GetDbContextCreator();
5961
var shardingProvider = shardingRuntimeContext.GetShardingProvider();
@@ -74,19 +76,19 @@ public static async Task DynamicMigrateWithDataSourcesAsync(IShardingRuntimeCont
7476
foreach (var migrationUnits in partitionMigrationUnits)
7577
{
7678
var migrateUnits = migrationUnits.Select(o =>new MigrateUnit(shellDbContext,o)).ToList();
77-
await ExecuteMigrateUnitsAsync(shardingRuntimeContext,migrateUnits,cancellationToken);
79+
await ExecuteMigrateUnitsAsync(shardingRuntimeContext,migrateUnits,targetMigration,cancellationToken);
7880
}
7981

8082
//包含默认默认的单独最后一次处理
8183
if (allDataSourceNames.Contains(defaultDataSourceName))
8284
{
83-
await ExecuteMigrateUnitsAsync(shardingRuntimeContext,new List<MigrateUnit>(){new MigrateUnit(shellDbContext,defaultDataSourceName)},cancellationToken);
85+
await ExecuteMigrateUnitsAsync(shardingRuntimeContext,new List<MigrateUnit>(){new MigrateUnit(shellDbContext,defaultDataSourceName)},targetMigration,cancellationToken);
8486
}
8587
}
8688
}
8789
}
8890

89-
private static async Task ExecuteMigrateUnitsAsync(IShardingRuntimeContext shardingRuntimeContext,List<MigrateUnit> migrateUnits,CancellationToken cancellationToken = new CancellationToken())
91+
private static async Task ExecuteMigrateUnitsAsync(IShardingRuntimeContext shardingRuntimeContext,List<MigrateUnit> migrateUnits,string targetMigration=null,CancellationToken cancellationToken = new CancellationToken())
9092
{
9193
var shardingMigrationManager = shardingRuntimeContext.GetShardingMigrationManager();
9294
var dbContextCreator = shardingRuntimeContext.GetDbContextCreator();
@@ -108,7 +110,8 @@ public static async Task DynamicMigrateWithDataSourcesAsync(IShardingRuntimeCont
108110
{
109111
if (( dbContext.Database.GetPendingMigrations()).Any())
110112
{
111-
dbContext.Database.Migrate();
113+
var migrator = dbContext.GetService<IMigrator>();
114+
migrator.Migrate(targetMigration);
112115
}
113116
}
114117

0 commit comments

Comments
 (0)