Skip to content

Commit 2c8b1d0

Browse files
committed
[#193] [#90]
1 parent c94add1 commit 2c8b1d0

23 files changed

+262
-394
lines changed

samples/Sample.AutoCreateIfPresent/MyShardingExtension.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public static Dictionary<string, Dictionary<DbContext, IEnumerable<TEntity>>> Bu
2828
var shardingRuntimeContext = shardingDbContext.GetShardingRuntimeContext();
2929
var entityType = typeof(TEntity);
3030
var routeTailFactory = shardingRuntimeContext.GetRouteTailFactory();
31-
var virtualDataSource = shardingDbContext.GetVirtualDataSource();
31+
var virtualDataSource = shardingRuntimeContext.GetVirtualDataSource();
3232
var dataSourceRouteManager = shardingRuntimeContext.GetDataSourceRouteManager();
3333
var tableRouteManager =shardingRuntimeContext.GetTableRouteManager();
3434
var entityMetadataManager = shardingRuntimeContext.GetEntityMetadataManager();

samples/Sample.MySql/Controllers/WeatherForecastController.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ public WeatherForecastController(DefaultShardingDbContext defaultTableDbContext,
5858

5959
public IQueryable<SysTest> GetAll()
6060
{
61+
var shardingRouteManager = _shardingRuntimeContext.GetShardingRouteManager();
6162
// var shardingTableCreator = _shardingRuntimeContext.GetShardingTableCreator();
6263
// var tableRouteManager = _shardingRuntimeContext.GetTableRouteManager();
6364
// //系统的时间分片都会实现 ITailAppendable 如果不是系统的自定义的转成你自己的对象即可

samples/Samples.AbpSharding/AbstractShardingAbpDbContext.cs

Lines changed: 6 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
using Volo.Abp.EntityFrameworkCore;
1818
using Volo.Abp.Reflection;
1919
using ShardingCore.Core.VirtualDatabase.VirtualDataSources;
20+
using ShardingCore.Exceptions;
2021
using ShardingCore.Sharding;
2122

2223
namespace Samples.AbpSharding
@@ -36,24 +37,6 @@ protected AbstractShardingAbpDbContext(DbContextOptions<TDbContext> options) : b
3637
}
3738
}
3839

39-
40-
/// <summary>
41-
/// 读写分离优先级
42-
/// </summary>
43-
public int ReadWriteSeparationPriority
44-
{
45-
get => _shardingDbContextExecutor.ReadWriteSeparationPriority;
46-
set => _shardingDbContextExecutor.ReadWriteSeparationPriority = value;
47-
}
48-
/// <summary>
49-
/// 是否使用读写分离
50-
/// </summary>
51-
public bool ReadWriteSeparation
52-
{
53-
get => _shardingDbContextExecutor.ReadWriteSeparation;
54-
set => _shardingDbContextExecutor.ReadWriteSeparation = value;
55-
}
56-
5740
/// <summary>
5841
/// 是否是真正的执行者
5942
/// </summary>
@@ -93,6 +76,11 @@ public DbContext CreateGenericDbContext<TEntity>(TEntity entity) where TEntity :
9376
return dbContext;
9477
}
9578

79+
public IShardingDbContextExecutor GetShardingExecutor()
80+
{
81+
return _shardingDbContextExecutor;
82+
}
83+
9684

9785
private void CheckAndSetShardingKeyThatSupportAutoCreate<TEntity>(TEntity entity) where TEntity : class
9886
{
@@ -541,39 +529,5 @@ public override async ValueTask DisposeAsync()
541529
await base.DisposeAsync();
542530
}
543531
}
544-
public Task RollbackAsync(CancellationToken cancellationToken = new CancellationToken())
545-
{
546-
return _shardingDbContextExecutor.RollbackAsync(cancellationToken);
547-
}
548-
549-
public Task CommitAsync(CancellationToken cancellationToken = new CancellationToken())
550-
{
551-
return _shardingDbContextExecutor.CommitAsync(cancellationToken);
552-
}
553-
554-
public void NotifyShardingTransaction()
555-
{
556-
_shardingDbContextExecutor.NotifyShardingTransaction();
557-
}
558-
559-
public void Rollback()
560-
{
561-
_shardingDbContextExecutor.Rollback();
562-
}
563-
564-
public void Commit()
565-
{
566-
_shardingDbContextExecutor.Commit();
567-
}
568-
569-
public IVirtualDataSource GetVirtualDataSource()
570-
{
571-
return _shardingDbContextExecutor.GetVirtualDataSource();
572-
}
573-
574-
public IDictionary<string, IDataSourceDbContext> GetCurrentDbContexts()
575-
{
576-
return _shardingDbContextExecutor.GetCurrentDbContexts();
577-
}
578532
}
579533
}

samples/Samples.AbpSharding/AbstractShardingAbpZeroDbContext.cs

Lines changed: 2 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -45,24 +45,6 @@ protected AbstractShardingAbpZeroDbContext(DbContextOptions<TSelf> options)
4545
_shardingDbContextExecutor = new ShardingDbContextExecutor(this);
4646
}
4747
}
48-
49-
/// <summary>
50-
/// 读写分离优先级
51-
/// </summary>
52-
public int ReadWriteSeparationPriority
53-
{
54-
get => _shardingDbContextExecutor.ReadWriteSeparationPriority;
55-
set => _shardingDbContextExecutor.ReadWriteSeparationPriority = value;
56-
}
57-
/// <summary>
58-
/// 是否使用读写分离
59-
/// </summary>
60-
public bool ReadWriteSeparation
61-
{
62-
get => _shardingDbContextExecutor.ReadWriteSeparation;
63-
set => _shardingDbContextExecutor.ReadWriteSeparation = value;
64-
}
65-
6648
/// <summary>
6749
/// 是否是真正的执行者
6850
/// </summary>
@@ -521,34 +503,9 @@ public DbContext CreateGenericDbContext<TEntity>(TEntity entity) where TEntity :
521503
return dbContext;
522504
}
523505

524-
public virtual IVirtualDataSource GetVirtualDataSource()
525-
{
526-
return _shardingDbContextExecutor.GetVirtualDataSource();
527-
}
528-
529-
public virtual Task RollbackAsync(CancellationToken cancellationToken = new CancellationToken())
530-
{
531-
return _shardingDbContextExecutor.RollbackAsync(cancellationToken);
532-
}
533-
534-
public virtual Task CommitAsync(CancellationToken cancellationToken = new CancellationToken())
535-
{
536-
return _shardingDbContextExecutor.CommitAsync(cancellationToken);
537-
}
538-
539-
public virtual void NotifyShardingTransaction()
540-
{
541-
_shardingDbContextExecutor.NotifyShardingTransaction();
542-
}
543-
544-
public virtual void Rollback()
545-
{
546-
_shardingDbContextExecutor.Rollback();
547-
}
548-
549-
public virtual void Commit()
506+
public IShardingDbContextExecutor GetShardingExecutor()
550507
{
551-
_shardingDbContextExecutor.Commit();
508+
return _shardingDbContextExecutor;
552509
}
553510

554511
#endregion
@@ -647,10 +604,5 @@ protected virtual void FillDbContextInject(DbContext dbContext)
647604
}
648605

649606
#endregion
650-
651-
public IDictionary<string, IDataSourceDbContext> GetCurrentDbContexts()
652-
{
653-
return _shardingDbContextExecutor.GetCurrentDbContexts();
654-
}
655607
}
656608
}

src/ShardingCore/EFCores/ChangeTrackers/ShardingChangeTracker.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public override bool HasChanges()
2828
{
2929
if (_dbContext is IShardingDbContext shardingDbContext)
3030
{
31-
return shardingDbContext.GetCurrentDbContexts().Any(o =>
31+
return shardingDbContext.GetShardingExecutor().GetCurrentDbContexts().Any(o =>
3232
o.Value.GetCurrentContexts().Any(r => r.Value.ChangeTracker.HasChanges()));
3333
}
3434

@@ -39,7 +39,7 @@ public override IEnumerable<EntityEntry> Entries()
3939
{
4040
if (_dbContext is IShardingDbContext shardingDbContext)
4141
{
42-
return shardingDbContext.GetCurrentDbContexts().SelectMany(o =>
42+
return shardingDbContext.GetShardingExecutor().GetCurrentDbContexts().SelectMany(o =>
4343
o.Value.GetCurrentContexts().SelectMany(cd => cd.Value.ChangeTracker.Entries()));
4444
}
4545

@@ -50,7 +50,7 @@ public override IEnumerable<EntityEntry<TEntity>> Entries<TEntity>()
5050
{
5151
if (_dbContext is IShardingDbContext shardingDbContext)
5252
{
53-
return shardingDbContext.GetCurrentDbContexts().SelectMany(o =>
53+
return shardingDbContext.GetShardingExecutor().GetCurrentDbContexts().SelectMany(o =>
5454
o.Value.GetCurrentContexts().SelectMany(cd => cd.Value.ChangeTracker.Entries<TEntity>()));
5555
}
5656

@@ -79,7 +79,7 @@ public override void AcceptAllChanges()
7979

8080
private void Do(Action<ChangeTracker> action)
8181
{
82-
var dataSourceDbContexts = ((IShardingDbContext)_dbContext).GetCurrentDbContexts();
82+
var dataSourceDbContexts = ((IShardingDbContext)_dbContext).GetShardingExecutor().GetCurrentDbContexts();
8383
foreach (var dataSourceDbContext in dataSourceDbContexts)
8484
{
8585
var currentContexts = dataSourceDbContext.Value.GetCurrentContexts();

src/ShardingCore/EFCores/RelationTransactions/ShardingRelationalTransaction.cs

Lines changed: 47 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ namespace ShardingCore.EFCores
2626
public class ShardingRelationalTransaction : RelationalTransaction
2727
{
2828
private readonly IShardingDbContext _shardingDbContext;
29+
private readonly IShardingDbContextExecutor _shardingDbContextExecutor;
2930
#if NET6_0
3031
public ShardingRelationalTransaction(IShardingDbContext shardingDbContext, IRelationalConnection connection, DbTransaction transaction, Guid transactionId, IDiagnosticsLogger<DbLoggerCategory.Database.Transaction> logger, bool transactionOwned, ISqlGenerationHelper sqlGenerationHelper) : base(connection, transaction, transactionId, logger, transactionOwned, sqlGenerationHelper)
3132
{
@@ -43,6 +44,9 @@ public ShardingRelationalTransaction(IShardingDbContext shardingDbContext, IRela
4344
_shardingDbContext = shardingDbContext ??
4445
throw new ShardingCoreInvalidOperationException(
4546
$"should implement {nameof(IShardingDbContext)}");
47+
_shardingDbContextExecutor = shardingDbContext.GetShardingExecutor() ??
48+
throw new ShardingCoreInvalidOperationException(
49+
$"{shardingDbContext.GetType()} cant get {nameof(IShardingDbContextExecutor)} from {nameof(shardingDbContext.GetShardingExecutor)}");
4650
}
4751

4852
#endif
@@ -65,45 +69,69 @@ public ShardingRelationalTransaction(IShardingDbContext shardingDbContext, IRela
6569
public override void Commit()
6670
{
6771
base.Commit();
68-
_shardingDbContext.Commit();
69-
_shardingDbContext.NotifyShardingTransaction();
72+
_shardingDbContextExecutor.Commit();
73+
_shardingDbContextExecutor.NotifyShardingTransaction();
7074
}
7175

7276
public override void Rollback()
7377
{
7478
base.Rollback();
75-
_shardingDbContext.Rollback();
76-
_shardingDbContext.NotifyShardingTransaction();
79+
_shardingDbContextExecutor.Rollback();
80+
_shardingDbContextExecutor.NotifyShardingTransaction();
7781
}
7882

7983
#if !NETCOREAPP2_0
8084
public override async Task RollbackAsync(CancellationToken cancellationToken = new CancellationToken())
8185
{
8286
await base.RollbackAsync(cancellationToken);
8387

84-
await _shardingDbContext.RollbackAsync(cancellationToken);
85-
_shardingDbContext.NotifyShardingTransaction();
88+
await _shardingDbContextExecutor.RollbackAsync(cancellationToken);
89+
_shardingDbContextExecutor.NotifyShardingTransaction();
8690
}
8791

8892
public override async Task CommitAsync(CancellationToken cancellationToken = new CancellationToken())
8993
{
9094
await base.CommitAsync(cancellationToken);
9195

92-
await _shardingDbContext.CommitAsync(cancellationToken);
93-
_shardingDbContext.NotifyShardingTransaction();
96+
await _shardingDbContextExecutor.CommitAsync(cancellationToken);
97+
_shardingDbContextExecutor.NotifyShardingTransaction();
9498
}
9599
#if !NETCOREAPP3_0&&!NETSTANDARD2_0
96-
// public override void CreateSavepoint(string name)
97-
// {
98-
// base.CreateSavepoint(name);
99-
// _shardingDbContext.CreateSavepoint(name);
100-
// }
101-
//
102-
// public override async Task CreateSavepointAsync(string name, CancellationToken cancellationToken = new CancellationToken())
103-
// {
104-
// await base.CreateSavepointAsync(name, cancellationToken);
105-
// await _shardingDbContext.CreateSavepointAsync(name,cancellationToken);
106-
// }
100+
public override void CreateSavepoint(string name)
101+
{
102+
base.CreateSavepoint(name);
103+
_shardingDbContextExecutor.CreateSavepoint(name);
104+
}
105+
106+
public override async Task CreateSavepointAsync(string name, CancellationToken cancellationToken = new CancellationToken())
107+
{
108+
await base.CreateSavepointAsync(name, cancellationToken);
109+
await _shardingDbContextExecutor.CreateSavepointAsync(name,cancellationToken);
110+
}
111+
112+
public override void RollbackToSavepoint(string name)
113+
{
114+
base.RollbackToSavepoint(name);
115+
_shardingDbContextExecutor.RollbackToSavepoint(name);
116+
}
117+
118+
public override async Task RollbackToSavepointAsync(string name, CancellationToken cancellationToken = new CancellationToken())
119+
{
120+
await base.RollbackToSavepointAsync(name, cancellationToken);
121+
await _shardingDbContextExecutor.RollbackToSavepointAsync(name,cancellationToken);
122+
}
123+
124+
public override void ReleaseSavepoint(string name)
125+
{
126+
base.ReleaseSavepoint(name);
127+
_shardingDbContextExecutor.ReleaseSavepoint(name);
128+
}
129+
130+
public override async Task ReleaseSavepointAsync(string name, CancellationToken cancellationToken = new CancellationToken())
131+
{
132+
await base.ReleaseSavepointAsync(name, cancellationToken);
133+
await _shardingDbContextExecutor.ReleaseSavepointAsync(name,cancellationToken);
134+
}
107135
#endif
108136
#endif
109137
}

src/ShardingCore/EFCores/ShardingLocalView.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ public ShardingLocalView(DbSet<TEntity> set) : base(set)
2121

2222
public override IEnumerator<TEntity> GetEnumerator()
2323
{
24-
if (_dbContext is IShardingDbContext currentDbContextDiscover)
24+
if (_dbContext is IShardingDbContext shardingDbContext)
2525
{
26-
var dataSourceDbContexts = currentDbContextDiscover.GetCurrentDbContexts();
26+
var dataSourceDbContexts = shardingDbContext.GetShardingExecutor().GetCurrentDbContexts();
2727
var enumerators = dataSourceDbContexts.SelectMany(o => o.Value.GetCurrentContexts().Select(cd=>cd.Value.Set<TEntity>().Local.GetEnumerator()));
2828
return new MultiEnumerator<TEntity>(enumerators);
2929
}

0 commit comments

Comments
 (0)