Skip to content

Commit be65256

Browse files
committed
修复命令行迁移bug升级到7.x.1.2 [#229]
1 parent fc0781a commit be65256

File tree

6 files changed

+49
-14
lines changed

6 files changed

+49
-14
lines changed

nuget-publish.bat

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
:start
22
::定义版本
3-
set EFCORE7=7.7.1.1
4-
set EFCORE6=7.6.1.1
5-
set EFCORE5=7.5.1.1
6-
set EFCORE3=7.3.1.1
7-
set EFCORE2=7.2.1.1
3+
set EFCORE7=7.7.1.2
4+
set EFCORE6=7.6.1.2
5+
set EFCORE5=7.5.1.2
6+
set EFCORE3=7.3.1.2
7+
set EFCORE2=7.2.1.2
88

99
::删除所有bin与obj下的文件
1010
@echo off

samples/Sample.MySql/DbContexts/DefaultShardingDbContext.cs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
using Sample.MySql.Domain.Entities;
88
using Sample.MySql.Domain.Maps;
99
using ShardingCore.Core.VirtualRoutes.TableRoutes.RouteTails.Abstractions;
10+
using ShardingCore.EFCores;
11+
using ShardingCore.Extensions;
1012
using ShardingCore.Sharding;
1113
using ShardingCore.Sharding.Abstractions;
1214

@@ -16,18 +18,19 @@ public class DefaultShardingDbContext : AbstractShardingDbContext, IShardingTabl
1618
{
1719
public DbSet<DynamicTable> DynamicTables { get; set; }
1820
public DbSet<SysUserMod> SysUserMod { get; set; }
21+
1922
public DefaultShardingDbContext(DbContextOptions<DefaultShardingDbContext> options) : base(options)
2023
{
2124
//切记不要在构造函数中使用会让模型提前创建的方法
2225
//ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;
2326
//Database.SetCommandTimeout(30000);
2427
}
2528

26-
// protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
27-
// {
28-
// base.OnConfiguring(optionsBuilder);
29-
// optionsBuilder.UseLazyLoadingProxies();
30-
// }
29+
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
30+
{
31+
base.OnConfiguring(optionsBuilder);
32+
this.GetShardingRuntimeContext().GetOrCreateShardingRuntimeModel(this);
33+
}
3134

3235
private readonly MethodInfo? _configureGlobalFiltersMethodInfo =
3336
typeof(DefaultShardingDbContext).GetMethod(nameof(ConfigureGlobalFilters),
@@ -72,6 +75,5 @@ protected void ConfigureGlobalFilters<TEntity>(ModelBuilder modelBuilder, IMutab
7275
}
7376

7477
public IRouteTail RouteTail { get; set; }
75-
7678
}
7779
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
using Microsoft.EntityFrameworkCore;
2+
using Microsoft.EntityFrameworkCore.Infrastructure;
3+
using Microsoft.EntityFrameworkCore.Internal;
4+
using ShardingCore.Extensions;
5+
6+
namespace ShardingCore.EFCores
7+
{
8+
public class ShardingDbSetInitializer:DbSetInitializer
9+
{
10+
#if !EFCORE2
11+
public ShardingDbSetInitializer(IDbSetFinder setFinder, IDbSetSource setSource) : base(setFinder, setSource)
12+
{
13+
}
14+
#endif
15+
#if EFCORE2
16+
public ShardingDbSetInitializer(IDbSetFinder setFinder, IDbSetSource setSource, IDbQuerySource querySource) : base(setFinder, setSource, querySource)
17+
{
18+
}
19+
#endif
20+
public override void InitializeSets(DbContext context)
21+
{
22+
base.InitializeSets(context);
23+
if (context.IsShellDbContext())
24+
{
25+
context.GetShardingRuntimeContext().GetOrCreateShardingRuntimeModel(context);
26+
}
27+
}
28+
}
29+
}

src/ShardingCore/Extensions/ShardingDbContextExtension.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,15 @@ namespace ShardingCore.Extensions
2020
{
2121
public static class ShardingDbContextExtension
2222
{
23+
public static bool IsShellDbContext(this DbContext dbContext)
24+
{
25+
return dbContext.GetService<IDbContextOptions>().FindExtension<ShardingWrapOptionsExtension>()!=null;
26+
}
2327
public static IShardingDbContextExecutor CreateShardingDbContextExecutor<TDbContext>(
2428
this TDbContext shellDbContext)
2529
where TDbContext:DbContext,IShardingDbContext
2630
{
27-
var shardingWrapOptionsExtension = shellDbContext.GetService<IDbContextOptions>().FindExtension<ShardingWrapOptionsExtension>();
28-
if (shardingWrapOptionsExtension != null)
31+
if (shellDbContext.IsShellDbContext())
2932
{
3033
return new ShardingDbContextExecutor(shellDbContext);
3134
}

src/ShardingCore/Sharding/ShardingDbContextExecutors/ShardingDbContextExecutor.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ public ShardingDbContextExecutor(DbContext shardingDbContext)
7878
_shardingDbContext = shardingDbContext;
7979
//初始化
8080
_shardingRuntimeContext = shardingDbContext.GetShardingRuntimeContext();
81-
_shardingRuntimeContext.GetOrCreateShardingRuntimeModel(shardingDbContext);
81+
// _shardingRuntimeContext.GetOrCreateShardingRuntimeModel(shardingDbContext);
8282
_shardingConfigOptions = _shardingRuntimeContext.GetShardingConfigOptions();
8383
_virtualDataSource = _shardingRuntimeContext.GetVirtualDataSource();
8484
_dataSourceRouteManager = _shardingRuntimeContext.GetDataSourceRouteManager();

src/ShardingCore/ShardingCoreExtension.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,7 @@ public static DbContextOptionsBuilder UseSharding(
224224
.UseShardingMigrator()
225225
.UseShardingOptions(shardingRuntimeContext)
226226
.ReplaceService<IQueryCompiler, ShardingQueryCompiler>()
227+
.ReplaceService<IDbSetInitializer, ShardingDbSetInitializer>()
227228
.ReplaceService<IChangeTrackerFactory, ShardingChangeTrackerFactory>()
228229
.ReplaceService<IDbContextTransactionManager,ShardingRelationalTransactionManager>()
229230
.ReplaceService<IStateManager,ShardingStateManager>()

0 commit comments

Comments
 (0)