diff --git a/nuget-publish.bat b/nuget-publish.bat index 699451e8..1e3fcae5 100644 --- a/nuget-publish.bat +++ b/nuget-publish.bat @@ -1,10 +1,10 @@ :start ::定义版本 -set EFCORE7=7.7.1.1 -set EFCORE6=7.6.1.1 -set EFCORE5=7.5.1.1 -set EFCORE3=7.3.1.1 -set EFCORE2=7.2.1.1 +set EFCORE7=7.7.1.2 +set EFCORE6=7.6.1.2 +set EFCORE5=7.5.1.2 +set EFCORE3=7.3.1.2 +set EFCORE2=7.2.1.2 ::删除所有bin与obj下的文件 @echo off diff --git a/samples/Sample.MySql/DbContexts/DefaultShardingDbContext.cs b/samples/Sample.MySql/DbContexts/DefaultShardingDbContext.cs index 1912278c..528716d1 100644 --- a/samples/Sample.MySql/DbContexts/DefaultShardingDbContext.cs +++ b/samples/Sample.MySql/DbContexts/DefaultShardingDbContext.cs @@ -7,6 +7,8 @@ using Microsoft.EntityFrameworkCore.Metadata; using Sample.MySql.Domain.Entities; using Sample.MySql.Domain.Maps; using ShardingCore.Core.VirtualRoutes.TableRoutes.RouteTails.Abstractions; +using ShardingCore.EFCores; +using ShardingCore.Extensions; using ShardingCore.Sharding; using ShardingCore.Sharding.Abstractions; @@ -16,6 +18,7 @@ namespace Sample.MySql.DbContexts { public DbSet DynamicTables { get; set; } public DbSet SysUserMod { get; set; } + public DefaultShardingDbContext(DbContextOptions options) : base(options) { //切记不要在构造函数中使用会让模型提前创建的方法 @@ -23,11 +26,11 @@ namespace Sample.MySql.DbContexts //Database.SetCommandTimeout(30000); } - // protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) - // { - // base.OnConfiguring(optionsBuilder); - // optionsBuilder.UseLazyLoadingProxies(); - // } + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + { + base.OnConfiguring(optionsBuilder); + this.GetShardingRuntimeContext().GetOrCreateShardingRuntimeModel(this); + } private readonly MethodInfo? _configureGlobalFiltersMethodInfo = typeof(DefaultShardingDbContext).GetMethod(nameof(ConfigureGlobalFilters), @@ -72,6 +75,5 @@ namespace Sample.MySql.DbContexts } public IRouteTail RouteTail { get; set; } - } } \ No newline at end of file diff --git a/src/ShardingCore/EFCores/ShardingDbSetInitializer.cs b/src/ShardingCore/EFCores/ShardingDbSetInitializer.cs new file mode 100644 index 00000000..91f7935e --- /dev/null +++ b/src/ShardingCore/EFCores/ShardingDbSetInitializer.cs @@ -0,0 +1,29 @@ +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Internal; +using ShardingCore.Extensions; + +namespace ShardingCore.EFCores +{ + public class ShardingDbSetInitializer:DbSetInitializer + { +#if !EFCORE2 + public ShardingDbSetInitializer(IDbSetFinder setFinder, IDbSetSource setSource) : base(setFinder, setSource) + { + } +#endif +#if EFCORE2 + public ShardingDbSetInitializer(IDbSetFinder setFinder, IDbSetSource setSource, IDbQuerySource querySource) : base(setFinder, setSource, querySource) + { + } +#endif + public override void InitializeSets(DbContext context) + { + base.InitializeSets(context); + if (context.IsShellDbContext()) + { + context.GetShardingRuntimeContext().GetOrCreateShardingRuntimeModel(context); + } + } + } +} diff --git a/src/ShardingCore/Extensions/ShardingDbContextExtension.cs b/src/ShardingCore/Extensions/ShardingDbContextExtension.cs index 482d4b0e..feab36bf 100644 --- a/src/ShardingCore/Extensions/ShardingDbContextExtension.cs +++ b/src/ShardingCore/Extensions/ShardingDbContextExtension.cs @@ -20,12 +20,15 @@ namespace ShardingCore.Extensions { public static class ShardingDbContextExtension { + public static bool IsShellDbContext(this DbContext dbContext) + { + return dbContext.GetService().FindExtension()!=null; + } public static IShardingDbContextExecutor CreateShardingDbContextExecutor( this TDbContext shellDbContext) where TDbContext:DbContext,IShardingDbContext { - var shardingWrapOptionsExtension = shellDbContext.GetService().FindExtension(); - if (shardingWrapOptionsExtension != null) + if (shellDbContext.IsShellDbContext()) { return new ShardingDbContextExecutor(shellDbContext); } diff --git a/src/ShardingCore/Sharding/ShardingDbContextExecutors/ShardingDbContextExecutor.cs b/src/ShardingCore/Sharding/ShardingDbContextExecutors/ShardingDbContextExecutor.cs index b8ef76cb..987b9c1c 100644 --- a/src/ShardingCore/Sharding/ShardingDbContextExecutors/ShardingDbContextExecutor.cs +++ b/src/ShardingCore/Sharding/ShardingDbContextExecutors/ShardingDbContextExecutor.cs @@ -78,7 +78,7 @@ namespace ShardingCore.Sharding.ShardingDbContextExecutors _shardingDbContext = shardingDbContext; //初始化 _shardingRuntimeContext = shardingDbContext.GetShardingRuntimeContext(); - _shardingRuntimeContext.GetOrCreateShardingRuntimeModel(shardingDbContext); + // _shardingRuntimeContext.GetOrCreateShardingRuntimeModel(shardingDbContext); _shardingConfigOptions = _shardingRuntimeContext.GetShardingConfigOptions(); _virtualDataSource = _shardingRuntimeContext.GetVirtualDataSource(); _dataSourceRouteManager = _shardingRuntimeContext.GetDataSourceRouteManager(); diff --git a/src/ShardingCore/ShardingCoreExtension.cs b/src/ShardingCore/ShardingCoreExtension.cs index 17b9971a..e89fbb1f 100644 --- a/src/ShardingCore/ShardingCoreExtension.cs +++ b/src/ShardingCore/ShardingCoreExtension.cs @@ -224,6 +224,7 @@ namespace ShardingCore .UseShardingMigrator() .UseShardingOptions(shardingRuntimeContext) .ReplaceService() + .ReplaceService() .ReplaceService() .ReplaceService() .ReplaceService()