Merge pull request #260 from IoTSharp/main

EFCore 8
This commit is contained in:
xuejmnet 2023-11-22 14:38:55 +08:00 committed by GitHub
commit 0addfdd6ab
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
24 changed files with 130 additions and 54 deletions

View File

@ -73,7 +73,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ShardingCore3", "src3\Shard
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ShardingCore2", "src2\ShardingCore2\ShardingCore2.csproj", "{F0393C32-2285-4F47-AC61-C1BA1CAC269D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample.MySQLDataSourceOnly", "samples\Sample.MySQLDataSourceOnly\Sample.MySQLDataSourceOnly.csproj", "{3B5A4B03-5190-41A8-8E4B-F95A79A5C018}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sample.MySQLDataSourceOnly", "samples\Sample.MySQLDataSourceOnly\Sample.MySQLDataSourceOnly.csproj", "{3B5A4B03-5190-41A8-8E4B-F95A79A5C018}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ShardingCore7", "src7\ShardingCore7\ShardingCore7.csproj", "{A308D253-A072-40EC-AA97-15EE82BB8AAD}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src7", "src7", "{A5321A3E-8539-4E2A-889C-8E91989EECBD}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -193,6 +197,10 @@ Global
{3B5A4B03-5190-41A8-8E4B-F95A79A5C018}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3B5A4B03-5190-41A8-8E4B-F95A79A5C018}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3B5A4B03-5190-41A8-8E4B-F95A79A5C018}.Release|Any CPU.Build.0 = Release|Any CPU
{A308D253-A072-40EC-AA97-15EE82BB8AAD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A308D253-A072-40EC-AA97-15EE82BB8AAD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A308D253-A072-40EC-AA97-15EE82BB8AAD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A308D253-A072-40EC-AA97-15EE82BB8AAD}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -226,6 +234,7 @@ Global
{B59909AD-8885-40F3-9454-6C8433463BCC} = {51E1D067-3E81-4815-94F2-F8ABBE80881E}
{F0393C32-2285-4F47-AC61-C1BA1CAC269D} = {B11D7DF7-A907-407E-8BF1-35B430413557}
{3B5A4B03-5190-41A8-8E4B-F95A79A5C018} = {EDF8869A-C1E1-491B-BC9F-4A33F4DE1C73}
{A308D253-A072-40EC-AA97-15EE82BB8AAD} = {A5321A3E-8539-4E2A-889C-8E91989EECBD}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {8C07A667-E8B4-43C7-8053-721584BAD291}

View File

@ -1,4 +1,4 @@
#if EFCORE7
#if EFCORE7 || EFCORE8
using Microsoft.EntityFrameworkCore.Migrations;
using ShardingCore.Core.RuntimeContexts;

View File

@ -1,4 +1,4 @@
#if EFCORE7
#if EFCORE7 || EFCORE8
using System;
using System.Collections.Generic;
using System.Linq;

View File

@ -1,5 +1,5 @@
#if EFCORE7
#if EFCORE7 || EFCORE8
using System.Threading;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;

View File

@ -1,4 +1,4 @@
#if EFCORE7
#if EFCORE7 || EFCORE8
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;

View File

@ -1,4 +1,4 @@
#if EFCORE7
#if EFCORE7 || EFCORE8
using System;
using System.Collections.Generic;

View File

@ -1,4 +1,4 @@
#if EFCORE7
#if EFCORE7 || EFCORE8
using System;
using System.Collections.Generic;

View File

@ -1,4 +1,4 @@
#if EFCORE7
#if EFCORE7 || EFCORE8
using System;
using System.Collections.Generic;

View File

@ -1,4 +1,4 @@
#if EFCORE7
#if EFCORE7 || EFCORE8
using System;
using System.Collections.Generic;
using System.Data.Common;

View File

@ -1,4 +1,4 @@
#if EFCORE7
#if EFCORE7 || EFCORE8
using System;
using System.Collections.Generic;
using System.Data.Common;

View File

@ -1,4 +1,4 @@
#if EFCORE7
#if EFCORE7 || EFCORE8
using System;
using System.Collections.Generic;
using System.Data;

View File

@ -1,4 +1,4 @@
#if EFCORE7
#if EFCORE7 || EFCORE8
using System;
using System.Collections.Generic;

View File

@ -32,10 +32,10 @@ namespace ShardingCore.Extensions
/// <param name="dbContext"></param>
public static void RemoveDbContextRelationModelThatIsShardingTable(this DbContext dbContext)
{
#if !EFCORE2 && !EFCORE3 && !EFCORE5 && !EFCORE6 && !EFCORE7
#if !EFCORE2 && !EFCORE3 && !EFCORE5 && !EFCORE6 && !EFCORE7 && !EFCORE8
throw new NotImplementedException();
#endif
#if EFCORE6 ||EFCORE7
#if EFCORE6 ||EFCORE7 || EFCORE8
var contextModel = dbContext.GetService<IDesignTimeModel>().Model;
#endif
@ -46,7 +46,7 @@ namespace ShardingCore.Extensions
var shardingRuntimeContext = dbContext.GetShardingRuntimeContext();
var entityMetadataManager = shardingRuntimeContext.GetEntityMetadataManager();
#if EFCORE6 || EFCORE7
#if EFCORE6 || EFCORE7 || EFCORE8
var entityTypes = contextModel.GetEntityTypes();
foreach (var entityType in entityTypes)
{
@ -55,15 +55,24 @@ namespace ShardingCore.Extensions
_data.Clear();
}
}
var contextModelRelationalModel = contextModel.GetRelationalModel() as RelationalModel;
var contextModelRelationalModel = contextModel.GetRelationalModel() as RelationalModel;
#if EFCORE6 || EFCORE7
var valueTuples =
contextModelRelationalModel.Tables.Where(o =>o.Value.EntityTypeMappings.Any(m => entityMetadataManager.IsShardingTable(m.EntityType.ClrType))).Select(o => o.Key).ToList();
contextModelRelationalModel.Tables.Where(o =>o.Value.EntityTypeMappings.Any(m => entityMetadataManager.IsShardingTable(m.EntityType.ClrType))).Select(o => o.Key).ToList();
#endif
#if EFCORE8
var valueTuples =
contextModelRelationalModel.Tables.Where(o => o.Value.EntityTypeMappings.Any(m => entityMetadataManager.IsShardingTable(m.TypeBase.ClrType))).Select(o => o.Key).ToList();
#endif
for (int i = 0; i < valueTuples.Count; i++)
{
contextModelRelationalModel.Tables.Remove(valueTuples[i]);
}
}
#endif
#if EFCORE5
#if EFCORE5
var entityTypes = contextModel.GetEntityTypes();
foreach (var entityType in entityTypes)
{
@ -132,10 +141,10 @@ namespace ShardingCore.Extensions
/// <param name="dbContext"></param>
public static void RemoveDbContextAllRelationModelWithoutShardingDataSourceOnly(this DbContext dbContext)
{
#if !EFCORE2&& !EFCORE3 && !EFCORE5 && !EFCORE6 && !EFCORE7
#if !EFCORE2&& !EFCORE3 && !EFCORE5 && !EFCORE6 && !EFCORE7 && !EFCORE8
throw new NotImplementedException();
#endif
#if EFCORE6 || EFCORE7
#if EFCORE6 || EFCORE7 || EFCORE8
var contextModel = dbContext.GetService<IDesignTimeModel>().Model; ;
#endif
@ -146,7 +155,7 @@ namespace ShardingCore.Extensions
var shardingRuntimeContext = dbContext.GetShardingRuntimeContext();
var entityMetadataManager = shardingRuntimeContext.GetEntityMetadataManager();
#if EFCORE6 || EFCORE7
#if EFCORE6 || EFCORE7 || EFCORE8
var entityTypes = contextModel.GetEntityTypes();
foreach (var entityType in entityTypes)
{
@ -155,15 +164,24 @@ namespace ShardingCore.Extensions
_data.Clear();
}
}
var contextModelRelationalModel = contextModel.GetRelationalModel() as RelationalModel;
var contextModelRelationalModel = contextModel.GetRelationalModel() as RelationalModel;
#if EFCORE6 || EFCORE7
var valueTuples =
contextModelRelationalModel.Tables.Where(o => o.Value.EntityTypeMappings.Any(m => !entityMetadataManager.IsOnlyShardingDataSource(m.EntityType.ClrType)) ).Select(o => o.Key).ToList();
contextModelRelationalModel.Tables.Where(o => o.Value.EntityTypeMappings.Any(m => !entityMetadataManager.IsOnlyShardingDataSource(m.EntityType.ClrType)) ).Select(o => o.Key).ToList();
#endif
#if EFCORE8
var valueTuples =
contextModelRelationalModel.Tables.Where(o => o.Value.EntityTypeMappings.Any(m => !entityMetadataManager.IsOnlyShardingDataSource(m.TypeBase.ClrType))).Select(o => o.Key).ToList();
#endif
for (int i = 0; i < valueTuples.Count; i++)
{
contextModelRelationalModel.Tables.Remove(valueTuples[i]);
}
}
#endif
#if EFCORE5
#if EFCORE5
var entityTypes = contextModel.GetEntityTypes();
foreach (var entityType in entityTypes)
{
@ -204,10 +222,10 @@ namespace ShardingCore.Extensions
/// <param name="dbContext"></param>
public static void RemoveDbContextAllRelationModel(this DbContext dbContext)
{
#if !EFCORE2 && !EFCORE3 && !EFCORE5 && !EFCORE6&& !EFCORE7
#if !EFCORE2 && !EFCORE3 && !EFCORE5 && !EFCORE6&& !EFCORE7&& !EFCORE8
throw new NotImplementedException();
#endif
#if EFCORE6|| EFCORE7
#if EFCORE6|| EFCORE7 || EFCORE8
var contextModel = dbContext.GetService<IDesignTimeModel>().Model; ;
#endif
@ -216,7 +234,7 @@ namespace ShardingCore.Extensions
var contextModel = dbContext.Model as Model;
#endif
#if EFCORE6 || EFCORE7
#if EFCORE6 || EFCORE7 || EFCORE8
var contextModelRelationalModel = contextModel.GetRelationalModel() as RelationalModel;
contextModelRelationalModel.Tables.Clear();
#endif
@ -239,14 +257,14 @@ namespace ShardingCore.Extensions
public static void RemoveDbContextRelationModelSaveOnlyThatIsNamedType(this DbContext dbContext,
Type shardingType)
{
#if !EFCORE2 && !EFCORE3 && !EFCORE5 && !EFCORE6&& !EFCORE7
#if !EFCORE2 && !EFCORE3 && !EFCORE5 && !EFCORE6&& !EFCORE7&& !EFCORE8
1
#endif
#if EFCORE2 || EFCORE3 || EFCORE5
var contextModel = dbContext.Model as Model;
#endif
#if EFCORE6 || EFCORE7
#if EFCORE6 || EFCORE7 || EFCORE8
var contextModel = dbContext.GetService<IDesignTimeModel>().Model;
var entityTypes = contextModel.GetEntityTypes();
foreach (var entityType in entityTypes)
@ -256,16 +274,26 @@ namespace ShardingCore.Extensions
_data.Clear();
}
}
var contextModelRelationalModel = contextModel.GetRelationalModel() as RelationalModel;
var contextModelRelationalModel = contextModel.GetRelationalModel() as RelationalModel;
#if EFCORE6 || EFCORE7
var valueTuples =
contextModelRelationalModel.Tables
.Where(o => o.Value.EntityTypeMappings.All(m => m.EntityType.ClrType != shardingType))
.Select(o => o.Key).ToList();
.Select(o => o.Key).ToList();
#endif
#if EFCORE8
var valueTuples =
contextModelRelationalModel.Tables
.Where(o => o.Value.EntityTypeMappings.All(m => m.TypeBase.ClrType != shardingType))
.Select(o => o.Key).ToList();
#endif
for (int i = 0; i < valueTuples.Count; i++)
{
contextModelRelationalModel.Tables.Remove(valueTuples[i]);
}
}
#endif
#if EFCORE5
var contextModelRelationalModel = contextModel.RelationalModel as RelationalModel;

View File

@ -1,4 +1,4 @@
#if EFCORE7
#if EFCORE7 || EFCORE8
using System;
using System.Linq;
using System.Linq.Expressions;

View File

@ -1,4 +1,4 @@
#if EFCORE7
#if EFCORE7 || EFCORE8
using System;
using System.Linq;
using System.Linq.Expressions;

View File

@ -1,4 +1,4 @@
#if EFCORE7
#if EFCORE7|| EFCORE8
using ShardingCore.Sharding.MergeEngines.Executors.Abstractions;
using ShardingCore.Sharding.MergeEngines.Executors.Methods;
using ShardingCore.Sharding.MergeEngines.ShardingMergeEngines.Abstractions.InMemoryMerge;

View File

@ -1,4 +1,4 @@
#if EFCORE7
#if EFCORE7 || EFCORE8
using ShardingCore.Sharding.MergeEngines.Executors.Abstractions;
using ShardingCore.Sharding.MergeEngines.Executors.Methods;
using ShardingCore.Sharding.MergeEngines.ShardingMergeEngines.Abstractions.InMemoryMerge;

View File

@ -67,12 +67,12 @@ namespace ShardingCore.Sharding.Parsers.Visitors
return base.VisitConstant(node);
}
#endif
#if EFCORE5 || EFCORE6 || EFCORE7
#if EFCORE5 || EFCORE6 || EFCORE7 || EFCORE8
protected override Expression VisitExtension(Expression node)
{
if (node is QueryRootExpression queryRootExpression)
{
#if EFCORE7
#if EFCORE7 || EFCORE8
TryAddShardingEntities(queryRootExpression.ElementType, null);
#else
TryAddShardingEntities(queryRootExpression.EntityType.ClrType, null);

View File

@ -121,7 +121,7 @@ namespace ShardingCore.Sharding.ShardingQueryExecutors
return EnsureResultTypeMergeExecute<TResult>(typeof(ContainsAsyncInMemoryMergeEngine<>),
mergeQueryCompilerContext, async, cancellationToken);
#if EFCORE7
#if EFCORE7|| EFCORE8
case nameof(RelationalQueryableExtensions.ExecuteUpdate):
return EnsureResultTypeMergeExecute<TResult>(typeof(ExecuteUpdateAsyncMemoryMergeEngine<>),
mergeQueryCompilerContext, async, cancellationToken);

View File

@ -119,7 +119,7 @@ namespace ShardingCore.Sharding.ShardingExecutors
case nameof(Queryable.LongCount):
case nameof(Queryable.Any):
return _whereQueryableCombine;
#if EFCORE7
#if EFCORE7|| EFCORE8
case nameof(RelationalQueryableExtensions.ExecuteUpdate):
return _executeUpdateQueryableCombine;
case nameof(RelationalQueryableExtensions.ExecuteDelete):

View File

@ -173,7 +173,7 @@ namespace ShardingCore.Core.Internal.Visitors
}
#endif
#if EFCORE5 || EFCORE6 ||EFCORE7
#if EFCORE5 || EFCORE6 ||EFCORE7 ||EFCORE8
internal class DbContextReplaceQueryableVisitor : DbContextInnerMemberReferenceReplaceQueryableVisitor
{
private readonly DbContext _dbContext;
@ -191,12 +191,12 @@ namespace ShardingCore.Core.Internal.Visitors
var dbContextDependencies =
typeof(DbContext).GetTypePropertyValue(_dbContext, "DbContextDependencies") as
IDbContextDependencies;
#if !EFCORE7
#if !EFCORE7&& !EFCORE8
var targetIQ =
(IQueryable)((IDbSetCache)_dbContext).GetOrAddSet(dbContextDependencies.SetSource,
queryRootExpression.EntityType.ClrType);
#endif
#if EFCORE7
#if EFCORE7|| EFCORE8
var targetIQ =
(IQueryable)((IDbSetCache)_dbContext).GetOrAddSet(dbContextDependencies.SetSource,
@ -209,12 +209,12 @@ namespace ShardingCore.Core.Internal.Visitors
RootIsVisit = true;
if (queryRootExpression is FromSqlQueryRootExpression fromSqlQueryRootExpression)
{
#if !EFCORE7
#if !EFCORE7 && !EFCORE8
var sqlQueryRootExpression = new FromSqlQueryRootExpression(newQueryable.Provider as IAsyncQueryProvider,
queryRootExpression.EntityType, fromSqlQueryRootExpression.Sql,
fromSqlQueryRootExpression.Argument);
#endif
#if EFCORE7
#if EFCORE7 || EFCORE8
var sqlQueryRootExpression = new FromSqlQueryRootExpression(newQueryable.Provider as IAsyncQueryProvider,
fromSqlQueryRootExpression.EntityType, fromSqlQueryRootExpression.Sql,
fromSqlQueryRootExpression.Argument);

View File

@ -114,7 +114,7 @@ namespace ShardingCore.Core.Internal.Visitors.Querys
}
#endif
#if EFCORE5|| EFCORE6 || EFCORE7
#if EFCORE5|| EFCORE6 || EFCORE7 || EFCORE8
/// <summary>
/// 获取分表类型
/// </summary>
@ -137,7 +137,7 @@ namespace ShardingCore.Core.Internal.Visitors.Querys
{
if (node is QueryRootExpression queryRootExpression)
{
#if EFCORE7
#if EFCORE7 || EFCORE8
_shardingEntities.Add(queryRootExpression.ElementType);
#else
_shardingEntities.Add(queryRootExpression.EntityType.ClrType);

View File

@ -1,9 +1,9 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<Version>$(EFCORE7)</Version>
<TargetFramework>net8.0</TargetFramework>
<Version>$(EFCORE8)</Version>
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
<DefineConstants>TRACE;DEBUG;EFCORE7;</DefineConstants>
<DefineConstants>TRACE;DEBUG;EFCORE8;</DefineConstants>
<LangVersion>latest</LangVersion>
<RepositoryUrl>https://github.com/dotnetcore/sharding-core</RepositoryUrl>
<PackageIcon>logo.png</PackageIcon>
@ -34,8 +34,8 @@
</None>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="7.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="8.0.0" />
</ItemGroup>
<ItemGroup>
<Folder Include="Sharding\Visitors\GroupBys" />

View File

@ -0,0 +1,39 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<Version>$(EFCORE7)</Version>
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
<DefineConstants>TRACE;DEBUG;EFCORE7;</DefineConstants>
<LangVersion>9.0</LangVersion>
<AssemblyName>ShardingCore</AssemblyName>
<RootNamespace>ShardingCore</RootNamespace>
<RepositoryUrl>https://github.com/xuejmnet/sharding-core</RepositoryUrl>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<DocumentationFile>bin\Release\ShardingCore7.xml</DocumentationFile>
</PropertyGroup>
<ItemGroup>
<None Include="..\..\Logo\logo.png">
<Pack>True</Pack>
<PackagePath>\</PackagePath>
</None>
</ItemGroup>
<ItemGroup>
<Compile Include="..\..\src\ShardingCore\**\*.cs" />
<Compile Remove="..\..\src\ShardingCore\obj\**" />
<Compile Remove="..\..\src\ShardingCore\bin\**" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="7.0.0" />
</ItemGroup>
</Project>