55using System . Threading ;
66using System . Threading . Tasks ;
77using Microsoft . EntityFrameworkCore ;
8+ using Microsoft . EntityFrameworkCore . Infrastructure ;
9+ using Microsoft . EntityFrameworkCore . Migrations ;
810using ShardingCore . Core . DbContextCreator ;
911using ShardingCore . Core . RuntimeContexts ;
1012using 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