暴露ShardingDbContextExecutor优化仅take的时候添加skip(0),发布x.3.2.2

This commit is contained in:
xuejiaming 2021-12-28 15:42:31 +08:00
parent fbe7207b86
commit c1e19efca5
8 changed files with 42 additions and 27 deletions

View File

@ -1,9 +1,9 @@
:start
::定义版本
set EFCORE2=2.3.2.01
set EFCORE3=3.3.2.01
set EFCORE5=5.3.2.01
set EFCORE6=6.3.2.01
set EFCORE2=2.3.2.02
set EFCORE3=3.3.2.02
set EFCORE5=5.3.2.02
set EFCORE6=6.3.2.02
::删除所有bin与obj下的文件
@echo off

View File

@ -10,6 +10,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using Sample.SqlServerShardingTable.Entities;
using Sample.SqlServerShardingTable.VirtualRoutes;
using ShardingCore;

View File

@ -28,7 +28,7 @@ namespace ShardingCore.Sharding
/// </summary>
public abstract class AbstractShardingDbContext : DbContext, IShardingDbContext, ISupportShardingTransaction, ISupportShardingReadWrite
{
private readonly IShardingDbContextExecutor _shardingDbContextExecutor;
protected IShardingDbContextExecutor ShardingDbContextExecutor { get; }
public AbstractShardingDbContext(DbContextOptions options) : base(options)
@ -36,7 +36,7 @@ namespace ShardingCore.Sharding
var wrapOptionsExtension = options.FindExtension<ShardingWrapOptionsExtension>();
if (wrapOptionsExtension != null)
{
_shardingDbContextExecutor =
ShardingDbContextExecutor =
(IShardingDbContextExecutor)Activator.CreateInstance(
typeof(ShardingDbContextExecutor<>).GetGenericType0(this.GetType()),this);
}
@ -48,16 +48,16 @@ namespace ShardingCore.Sharding
/// </summary>
public int ReadWriteSeparationPriority
{
get => _shardingDbContextExecutor.ReadWriteSeparationPriority;
set => _shardingDbContextExecutor.ReadWriteSeparationPriority = value;
get => ShardingDbContextExecutor.ReadWriteSeparationPriority;
set => ShardingDbContextExecutor.ReadWriteSeparationPriority = value;
}
/// <summary>
/// 是否使用读写分离
/// </summary>
public bool ReadWriteSeparation
{
get => _shardingDbContextExecutor.ReadWriteSeparation;
set => _shardingDbContextExecutor.ReadWriteSeparation = value;
get => ShardingDbContextExecutor.ReadWriteSeparation;
set => ShardingDbContextExecutor.ReadWriteSeparation = value;
}
/// <summary>
@ -69,7 +69,7 @@ namespace ShardingCore.Sharding
public DbContext GetDbContext(string dataSourceName, bool parallelQuery, IRouteTail routeTail)
{
return _shardingDbContextExecutor.CreateDbContext(parallelQuery, dataSourceName, routeTail);
return ShardingDbContextExecutor.CreateDbContext(parallelQuery, dataSourceName, routeTail);
}
/// <summary>
@ -80,7 +80,7 @@ namespace ShardingCore.Sharding
/// <returns></returns>
public DbContext CreateGenericDbContext<TEntity>(TEntity entity) where TEntity : class
{
return _shardingDbContextExecutor.CreateGenericDbContext(entity);
return ShardingDbContextExecutor.CreateGenericDbContext(entity);
}
@ -392,17 +392,17 @@ namespace ShardingCore.Sharding
//ApplyShardingConcepts();
int i = 0;
//如果是内部开的事务就内部自己消化
if (Database.CurrentTransaction==null&&_shardingDbContextExecutor.IsMultiDbContext)
if (Database.CurrentTransaction==null&&ShardingDbContextExecutor.IsMultiDbContext)
{
using (var tran = Database.BeginTransaction())
{
i = _shardingDbContextExecutor.SaveChanges(acceptAllChangesOnSuccess);
i = ShardingDbContextExecutor.SaveChanges(acceptAllChangesOnSuccess);
tran.Commit();
}
}
else
{
i = _shardingDbContextExecutor.SaveChanges(acceptAllChangesOnSuccess);
i = ShardingDbContextExecutor.SaveChanges(acceptAllChangesOnSuccess);
}
return i;
@ -423,11 +423,11 @@ namespace ShardingCore.Sharding
//ApplyShardingConcepts();
int i = 0;
//如果是内部开的事务就内部自己消化
if (Database.CurrentTransaction==null && _shardingDbContextExecutor.IsMultiDbContext)
if (Database.CurrentTransaction==null && ShardingDbContextExecutor.IsMultiDbContext)
{
using (var tran = await Database.BeginTransactionAsync(cancellationToken))
{
i = await _shardingDbContextExecutor.SaveChangesAsync(acceptAllChangesOnSuccess, cancellationToken);
i = await ShardingDbContextExecutor.SaveChangesAsync(acceptAllChangesOnSuccess, cancellationToken);
#if EFCORE2
tran.Commit();
#endif
@ -438,7 +438,7 @@ namespace ShardingCore.Sharding
}
else
{
i = await _shardingDbContextExecutor.SaveChangesAsync(acceptAllChangesOnSuccess, cancellationToken);
i = await ShardingDbContextExecutor.SaveChangesAsync(acceptAllChangesOnSuccess, cancellationToken);
}
@ -454,7 +454,7 @@ namespace ShardingCore.Sharding
}
else
{
_shardingDbContextExecutor.Dispose();
ShardingDbContextExecutor.Dispose();
base.Dispose();
}
}
@ -468,35 +468,35 @@ namespace ShardingCore.Sharding
}
else
{
await _shardingDbContextExecutor.DisposeAsync();
await ShardingDbContextExecutor.DisposeAsync();
await base.DisposeAsync();
}
}
public Task RollbackAsync(CancellationToken cancellationToken = new CancellationToken())
{
return _shardingDbContextExecutor.RollbackAsync(cancellationToken);
return ShardingDbContextExecutor.RollbackAsync(cancellationToken);
}
public Task CommitAsync(CancellationToken cancellationToken = new CancellationToken())
{
return _shardingDbContextExecutor.CommitAsync(cancellationToken);
return ShardingDbContextExecutor.CommitAsync(cancellationToken);
}
#endif
public void NotifyShardingTransaction()
{
_shardingDbContextExecutor.NotifyShardingTransaction();
ShardingDbContextExecutor.NotifyShardingTransaction();
}
public void Rollback()
{
_shardingDbContextExecutor.Rollback();
ShardingDbContextExecutor.Rollback();
}
public void Commit()
{
_shardingDbContextExecutor.Commit();
ShardingDbContextExecutor.Commit();
}
}

View File

@ -2,8 +2,10 @@
using Microsoft.EntityFrameworkCore.Storage;
using ShardingCore.Core.VirtualRoutes.TableRoutes.RouteTails.Abstractions;
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using ShardingCore.Sharding.ShardingDbContextExecutors;
namespace ShardingCore.Sharding.Abstractions
{
@ -71,6 +73,8 @@ namespace ShardingCore.Sharding.Abstractions
/// commit
/// </summary>
void Commit();
IDictionary<string, IDataSourceDbContext> GetCurrentDbContexts();
#if !EFCORE2
/// <summary>
/// rollback async

View File

@ -45,7 +45,7 @@ namespace ShardingCore.Core.Internal.StreamMerge.ReWrite
}
if (take.HasValue)
reWriteQueryable = reWriteQueryable.Take(take.Value + skip.GetValueOrDefault());
reWriteQueryable = reWriteQueryable.Skip(0).Take(take.Value + skip.GetValueOrDefault());
//包含group by
if (extraEntry.GroupByContext.GroupExpression != null)
{

View File

@ -270,6 +270,11 @@ namespace ShardingCore.Sharding.ShardingDbContextExecutors
return i;
}
public IDictionary<string, DbContext> GetCurrentContexts()
{
return _dataSourceDbContexts;
}
public void Rollback()
{
if (IsDefault)

View File

@ -38,7 +38,7 @@ namespace ShardingCore.Sharding.ShardingDbContextExecutors
Task<int> SaveChangesAsync(bool acceptAllChangesOnSuccess,CancellationToken cancellationToken = new CancellationToken());
IDictionary<string, DbContext> GetCurrentContexts();
void Rollback();
void Commit(int dataSourceCount);

View File

@ -180,6 +180,11 @@ namespace ShardingCore.Sharding.ShardingDbContextExecutors
}
}
public IDictionary<string, IDataSourceDbContext> GetCurrentDbContexts()
{
return _dbContextCaches;
}
#endregion