修复读写分离bug,发布x.3.1.50
This commit is contained in:
parent
4c1267cf83
commit
50ae6906ab
|
@ -13,7 +13,10 @@
|
|||
|
||||
## 📚 Documentation
|
||||
|
||||
[中文文档](https://xuejmnet.github.io/sharding-core-doc/) | [English Document](https://xuejmnet.github.io/sharding-core-doc/en/)
|
||||
[中文文档Github](https://xuejmnet.github.io/sharding-core-doc/) | [English Document Github](https://xuejmnet.github.io/sharding-core-doc/en/)
|
||||
|
||||
|
||||
[中文文档Gitee](https://xuejm.gitee.io/sharding-core-doc/) | [English Document Gitee](https://xuejm.gitee.io/sharding-core-doc/en/)
|
||||
### 依赖
|
||||
|
||||
Release | EF Core | .NET | .NET (Core)
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
:start
|
||||
::定义版本
|
||||
set EFCORE2=2.3.1.49
|
||||
set EFCORE3=3.3.1.49
|
||||
set EFCORE5=5.3.1.49
|
||||
set EFCORE6=6.3.1.49
|
||||
set EFCORE2=2.3.1.50
|
||||
set EFCORE3=3.3.1.50
|
||||
set EFCORE5=5.3.1.50
|
||||
set EFCORE6=6.3.1.50
|
||||
|
||||
::删除所有bin与obj下的文件
|
||||
@echo off
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace ShardingCore.Core.ShardingEnumerableQueries
|
||||
{
|
||||
public interface IShardingEmptyEnumerableQuery
|
||||
{
|
||||
IQueryable EmptyQueryable();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Linq.Expressions;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace ShardingCore.Core.ShardingEnumerableQueries
|
||||
{
|
||||
internal class ShardingEmptyEnumerableQuery<TSource>: IShardingEmptyEnumerableQuery
|
||||
{
|
||||
private readonly Expression<Func<TSource, bool>> _whereExpression;
|
||||
|
||||
public ShardingEmptyEnumerableQuery(Expression<Func<TSource,bool>> whereExpression)
|
||||
{
|
||||
_whereExpression = whereExpression;
|
||||
}
|
||||
|
||||
public IQueryable EmptyQueryable()
|
||||
{
|
||||
return new List<TSource>(0).AsQueryable().Where(_whereExpression);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -5,6 +5,7 @@ using System.Linq;
|
|||
using System.Linq.Expressions;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using ShardingCore.Core.EntityMetadatas;
|
||||
using ShardingCore.Core.ShardingEnumerableQueries;
|
||||
using ShardingCore.Core.VirtualDatabase.VirtualDataSources.PhysicDataSources;
|
||||
using ShardingCore.Core.VirtualRoutes;
|
||||
using ShardingCore.Core.VirtualRoutes.DataSourceRoutes;
|
||||
|
@ -45,7 +46,10 @@ namespace ShardingCore.Core.VirtualDatabase.VirtualDataSources
|
|||
if (routeRouteConfig.UseQueryable())
|
||||
return virtualDataSourceRoute.RouteWithPredicate(routeRouteConfig.GetQueryable(), true);
|
||||
if (routeRouteConfig.UsePredicate())
|
||||
return virtualDataSourceRoute.RouteWithPredicate((IQueryable)Activator.CreateInstance(typeof(EnumerableQuery<>).MakeGenericType(entityType), routeRouteConfig.UsePredicate()), false);
|
||||
{
|
||||
var shardingEmptyEnumerableQuery = (IShardingEmptyEnumerableQuery)Activator.CreateInstance(typeof(ShardingEmptyEnumerableQuery<>).MakeGenericType(entityType), routeRouteConfig.GetPredicate());
|
||||
return virtualDataSourceRoute.RouteWithPredicate(shardingEmptyEnumerableQuery.EmptyQueryable(), false);
|
||||
}
|
||||
object shardingKeyValue = null;
|
||||
if (routeRouteConfig.UseValue())
|
||||
shardingKeyValue = routeRouteConfig.GetShardingKeyValue();
|
||||
|
|
|
@ -69,7 +69,7 @@ namespace ShardingCore.DIExtensions
|
|||
{
|
||||
services.AddTransient<IConnectionStringManager<TShardingDbContext>, ReadWriteConnectionStringManager<TShardingDbContext>>();
|
||||
|
||||
services.AddSingleton<IReadWriteOptions, ReadWriteOptions<TShardingDbContext>>(sp =>
|
||||
services.AddSingleton<IReadWriteOptions<TShardingDbContext>, ReadWriteOptions<TShardingDbContext>>(sp =>
|
||||
new ReadWriteOptions<TShardingDbContext>(
|
||||
_shardingCoreConfigBuilder.ShardingConfigOption.ReadWriteDefaultPriority,
|
||||
_shardingCoreConfigBuilder.ShardingConfigOption.ReadWriteDefaultEnable,
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Runtime.Serialization;
|
||||
using System.Text;
|
||||
|
||||
|
@ -12,7 +13,8 @@ namespace ShardingCore.Exceptions
|
|||
* @Ver: 1.0
|
||||
* @Email: 326308290@qq.com
|
||||
*/
|
||||
public class ShardingCoreException: Exception
|
||||
[ExcludeFromCodeCoverage]
|
||||
public class ShardingCoreException : Exception
|
||||
{
|
||||
|
||||
public ShardingCoreException(string message) : base(message)
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Linq;
|
||||
using System.Runtime.Serialization;
|
||||
using System.Text;
|
||||
|
@ -7,6 +8,7 @@ using System.Threading.Tasks;
|
|||
|
||||
namespace ShardingCore.Exceptions
|
||||
{
|
||||
[ExcludeFromCodeCoverage]
|
||||
public class ShardingCoreInvalidOperationException: ShardingCoreException
|
||||
{
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Runtime.Serialization;
|
||||
using System.Text;
|
||||
|
||||
|
@ -12,6 +13,7 @@ namespace ShardingCore.Exceptions
|
|||
* @Ver: 1.0
|
||||
* @Email: 326308290@qq.com
|
||||
*/
|
||||
[ExcludeFromCodeCoverage]
|
||||
public class ShardingCoreParallelQueryTimeOutException:ShardingCoreException
|
||||
{
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Linq;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using ShardingCore.Core.Internal.Visitors;
|
||||
|
@ -45,12 +46,13 @@ namespace ShardingCore.Extensions
|
|||
var expression = new RemoveTakeVisitor().Visit(source.Expression);
|
||||
return (IQueryable<T>) source.Provider.CreateQuery(expression);
|
||||
}
|
||||
[ExcludeFromCodeCoverage]
|
||||
internal static IQueryable<T> RemoveOrderBy<T>(this IQueryable<T> source)
|
||||
{
|
||||
var expression = new RemoveOrderByVisitor().Visit(source.Expression);
|
||||
return (IQueryable<T>)source.Provider.CreateQuery(expression);
|
||||
}
|
||||
|
||||
[ExcludeFromCodeCoverage]
|
||||
internal static IQueryable<T> RemoveOrderByDescending<T>(this IQueryable<T> source)
|
||||
{
|
||||
var expression = new RemoveOrderByDescendingVisitor().Visit(source.Expression);
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using ShardingCore.Sharding.PaginationConfigurations;
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
@ -11,6 +12,7 @@ namespace ShardingCore.Extensions
|
|||
{
|
||||
public static class ShardingCoreConfigBuilderExtension
|
||||
{
|
||||
[ExcludeFromCodeCoverage]
|
||||
public static void AddEntityTryCreateTable<TEntity>(this ShardingCoreBeginOptions source) where TEntity:class
|
||||
{
|
||||
source.AddEntitiesTryCreateTable(typeof(TEntity));
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using ShardingCore.Sharding.Abstractions;
|
||||
using ShardingCore.Sharding.ReadWriteConfigurations;
|
||||
using ShardingCore.Sharding.ReadWriteConfigurations.Abstractions;
|
||||
|
||||
namespace ShardingCore.Extensions
|
||||
|
@ -15,6 +16,7 @@ namespace ShardingCore.Extensions
|
|||
*/
|
||||
public static class ShardingReadWriteExtension
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// 设置读写分离读取写数据库
|
||||
/// </summary>
|
||||
|
@ -67,5 +69,10 @@ namespace ShardingCore.Extensions
|
|||
supportShardingReadWrite.ReadWriteSeparation = readOnly;
|
||||
}
|
||||
}
|
||||
public static void SetReadWriteSeparation(this ShardingReadWriteContext shardingReadWriteContext,int priority, bool readOnly)
|
||||
{
|
||||
shardingReadWriteContext.DefaultPriority = priority;
|
||||
shardingReadWriteContext.DefaultReadEnable = readOnly;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Runtime.ExceptionServices;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
|
@ -14,6 +15,7 @@ namespace ShardingCore.Extensions
|
|||
* @Ver: 1.0
|
||||
* @Email: 326308290@qq.com
|
||||
*/
|
||||
[ExcludeFromCodeCoverage]
|
||||
internal static class TaskExtension
|
||||
{
|
||||
/// <summary>
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Globalization;
|
||||
using System.Runtime.Serialization;
|
||||
using System.Text;
|
||||
|
@ -205,6 +206,7 @@ namespace ShardingCore.Jobs.Cron
|
|||
/// <author>Contributions from Mads Henderson</author>
|
||||
/// <author>Refactoring from CronTrigger to CronExpression by Aaron Craven</author>
|
||||
[Serializable]
|
||||
[ExcludeFromCodeCoverage]
|
||||
internal class CronExpression : ICloneable, IDeserializationCallback
|
||||
{
|
||||
/// <summary>
|
||||
|
@ -1059,7 +1061,6 @@ namespace ShardingCore.Jobs.Cron
|
|||
i++;
|
||||
return i;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the cron expression string.
|
||||
/// </summary>
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
*/
|
||||
|
||||
using System.Collections;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
|
||||
namespace ShardingCore.Jobs.Cron
|
||||
{
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
*/
|
||||
|
||||
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using ShardingCore.Jobs.Cron;
|
||||
|
||||
namespace ShardingCore.Jobs
|
||||
|
@ -23,7 +24,7 @@ namespace ShardingCore.Jobs
|
|||
/// <summary>
|
||||
/// A sorted set.
|
||||
/// </summary>
|
||||
internal interface ISortedSet : ISet
|
||||
internal interface ISortedSet : ISet
|
||||
{
|
||||
/// <summary>
|
||||
/// Returns a portion of the list whose elements are greater than the limit object parameter.
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
|
||||
namespace ShardingCore.Jobs.Cron
|
||||
{
|
||||
|
@ -24,6 +25,7 @@ namespace ShardingCore.Jobs.Cron
|
|||
/// SupportClass for the TreeSet class.
|
||||
/// </summary>
|
||||
[Serializable]
|
||||
[ExcludeFromCodeCoverage]
|
||||
internal class TreeSet : ArrayList, ISortedSet
|
||||
{
|
||||
private readonly IComparer comparator = Comparer.Default;
|
||||
|
|
|
@ -14,7 +14,7 @@ namespace ShardingCore.Jobs
|
|||
*/
|
||||
internal static class DIExtension
|
||||
{
|
||||
public static IServiceCollection TryAddShardingJob(this IServiceCollection services)
|
||||
internal static IServiceCollection TryAddShardingJob(this IServiceCollection services)
|
||||
{
|
||||
services.TryAddSingleton<JobRunnerService>();
|
||||
services.TryAddSingleton<IJobManager, InMemoryJobManager>();
|
||||
|
|
|
@ -2,6 +2,7 @@ using Microsoft.Extensions.Logging;
|
|||
using ShardingCore.Jobs.Abstaractions;
|
||||
using ShardingCore.Jobs.Impls;
|
||||
using System;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
@ -14,6 +15,7 @@ namespace ShardingCore.Jobs
|
|||
* @Date: Wednesday, 06 January 2021 13:00:11
|
||||
* @Email: 326308290@qq.com
|
||||
*/
|
||||
[ExcludeFromCodeCoverage]
|
||||
internal class JobRunnerService
|
||||
{
|
||||
private readonly IServiceProvider _serviceProvider;
|
||||
|
|
|
@ -13,7 +13,8 @@ namespace ShardingCore.Sharding.ReadWriteConfigurations.Abstractions
|
|||
* @Ver: 1.0
|
||||
* @Email: 326308290@qq.com
|
||||
*/
|
||||
public interface IReadWriteOptions
|
||||
public interface IReadWriteOptions<TShardingDbContext>
|
||||
where TShardingDbContext : DbContext, IShardingDbContext
|
||||
{
|
||||
/// <summary>
|
||||
/// 默认读写配置优先级
|
||||
|
@ -25,10 +26,4 @@ namespace ShardingCore.Sharding.ReadWriteConfigurations.Abstractions
|
|||
bool ReadWriteSupport { get; }
|
||||
ReadConnStringGetStrategyEnum ReadConnStringGetStrategy { get; }
|
||||
}
|
||||
|
||||
public interface IReadWriteOptions<TShardingDbContext> : IReadWriteOptions
|
||||
where TShardingDbContext : DbContext, IShardingDbContext
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,6 +20,7 @@ namespace ShardingCore.Sharding.ReadWriteConfigurations.Abstractions
|
|||
public interface IShardingConnectionStringResolver<TShardingDbContext>
|
||||
where TShardingDbContext : DbContext, IShardingDbContext
|
||||
{
|
||||
bool ContainsReadWriteDataSourceName(string dataSourceName);
|
||||
string GetConnectionString(string dataSourceName);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,6 +32,11 @@ namespace ShardingCore.Sharding.ReadWriteConfigurations
|
|||
}
|
||||
}
|
||||
|
||||
public bool ContainsReadWriteDataSourceName(string dataSourceName)
|
||||
{
|
||||
return _connectors.ContainsKey(dataSourceName);
|
||||
}
|
||||
|
||||
public string GetConnectionString(string dataSourceName)
|
||||
{
|
||||
if (!_connectors.TryGetValue(dataSourceName, out var connector))
|
||||
|
|
|
@ -22,6 +22,7 @@ namespace ShardingCore.Sharding.ReadWriteConfigurations
|
|||
{
|
||||
private readonly ConcurrentDictionary<string, ReadWriteRandomConnector> _connectors =
|
||||
new ConcurrentDictionary<string, ReadWriteRandomConnector>();
|
||||
|
||||
public RandomShardingConnectionStringResolver(IEnumerable<ReadWriteRandomConnector> connectors)
|
||||
{
|
||||
var enumerator = connectors.GetEnumerator();
|
||||
|
@ -31,6 +32,12 @@ namespace ShardingCore.Sharding.ReadWriteConfigurations
|
|||
if (currentConnector != null)
|
||||
_connectors.TryAdd(currentConnector.DataSourceName, currentConnector);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public bool ContainsReadWriteDataSourceName(string dataSourceName)
|
||||
{
|
||||
return _connectors.ContainsKey(dataSourceName);
|
||||
}
|
||||
|
||||
public string GetConnectionString(string dataSourceName)
|
||||
|
|
|
@ -19,14 +19,18 @@ namespace ShardingCore.Sharding.ReadWriteConfigurations
|
|||
public class ReadWriteConnectionStringManager<TShardingDbContext> : IConnectionStringManager<TShardingDbContext> where TShardingDbContext : DbContext, IShardingDbContext
|
||||
{
|
||||
private IShardingConnectionStringResolver<TShardingDbContext> _shardingConnectionStringResolver;
|
||||
private readonly IVirtualDataSource<TShardingDbContext> _virtualDataSource;
|
||||
|
||||
|
||||
public ReadWriteConnectionStringManager(IShardingConnectionStringResolver<TShardingDbContext> shardingConnectionStringResolver)
|
||||
public ReadWriteConnectionStringManager(IShardingConnectionStringResolver<TShardingDbContext> shardingConnectionStringResolver,IVirtualDataSource<TShardingDbContext> virtualDataSource)
|
||||
{
|
||||
_shardingConnectionStringResolver = shardingConnectionStringResolver;
|
||||
_virtualDataSource = virtualDataSource;
|
||||
}
|
||||
public string GetConnectionString(string dataSourceName)
|
||||
{
|
||||
if (!_shardingConnectionStringResolver.ContainsReadWriteDataSourceName(dataSourceName))
|
||||
return _virtualDataSource.GetPhysicDataSource(dataSourceName).ConnectionString;
|
||||
return _shardingConnectionStringResolver.GetConnectionString(dataSourceName);
|
||||
|
||||
}
|
||||
|
|
|
@ -29,6 +29,8 @@ namespace ShardingCore.Sharding.ReadWriteConfigurations
|
|||
|
||||
public string GetConnectionString()
|
||||
{
|
||||
if (_length == 1)
|
||||
return _connectionStrings[0];
|
||||
var newValue = Interlocked.Increment(ref _seed);
|
||||
var next = (int)(newValue % _length);
|
||||
if (next < 0)
|
||||
|
|
|
@ -15,7 +15,7 @@ namespace ShardingCore.Sharding.ReadWriteConfigurations
|
|||
* @Email: 326308290@qq.com
|
||||
*/
|
||||
|
||||
public class ReadWriteOptions<TShardingDbContext> : IReadWriteOptions
|
||||
public class ReadWriteOptions<TShardingDbContext> : IReadWriteOptions<TShardingDbContext>
|
||||
where TShardingDbContext : DbContext, IShardingDbContext
|
||||
{
|
||||
public ReadWriteOptions(int readWritePriority, bool readWriteSupport, ReadConnStringGetStrategyEnum readConnStringGetStrategy)
|
||||
|
|
|
@ -25,6 +25,8 @@ namespace ShardingCore.Sharding.ReadWriteConfigurations
|
|||
}
|
||||
public string GetConnectionString()
|
||||
{
|
||||
if (_length == 1)
|
||||
return _connectionStrings[0];
|
||||
var next = RandomHelper.Next(0, _length);
|
||||
return _connectionStrings[next];
|
||||
|
||||
|
|
|
@ -1,7 +1,4 @@
|
|||
using System;
|
||||
using ShardingCore.Core;
|
||||
using ShardingCore.Core.EntityMetadatas;
|
||||
using ShardingCore.Core.VirtualRoutes.TableRoutes.Abstractions;
|
||||
|
||||
namespace ShardingCore.VirtualRoutes.Abstractions
|
||||
{
|
||||
|
|
|
@ -1,7 +1,3 @@
|
|||
using ShardingCore.Core;
|
||||
using ShardingCore.Core.EntityMetadatas;
|
||||
using ShardingCore.Core.VirtualRoutes.TableRoutes.Abstractions;
|
||||
|
||||
namespace ShardingCore.VirtualRoutes.Abstractions
|
||||
{
|
||||
/*
|
||||
|
|
|
@ -14,7 +14,9 @@ using ShardingCore.Core.VirtualDatabase.VirtualTables;
|
|||
using ShardingCore.Exceptions;
|
||||
using ShardingCore.Extensions;
|
||||
using ShardingCore.Extensions.ShardingPageExtensions;
|
||||
using ShardingCore.Sharding;
|
||||
using ShardingCore.Sharding.Abstractions;
|
||||
using ShardingCore.Sharding.ReadWriteConfigurations.Abstractions;
|
||||
using ShardingCore.Sharding.ShardingComparision.Abstractions;
|
||||
using ShardingCore.TableCreator;
|
||||
using ShardingCore.Test2x.Domain.Entities;
|
||||
|
@ -32,29 +34,31 @@ namespace ShardingCore.Test2x
|
|||
{
|
||||
private readonly ShardingDefaultDbContext _virtualDbContext;
|
||||
private readonly IShardingRouteManager _shardingRouteManager;
|
||||
private readonly IConnectionStringManager<ShardingDefaultDbContext> _connectionStringManager;
|
||||
private readonly ActualConnectionStringManager<ShardingDefaultDbContext> _connectionStringManager;
|
||||
private readonly IConfiguration _configuration;
|
||||
private readonly IEntityMetadataManager<ShardingDefaultDbContext> _entityMetadataManager;
|
||||
private readonly IShardingComparer<ShardingDefaultDbContext> _shardingComparer;
|
||||
private readonly IVirtualDataSource<ShardingDefaultDbContext> _virtualDataSource;
|
||||
private readonly IVirtualTableManager<ShardingDefaultDbContext> _virtualTableManager;
|
||||
private readonly IShardingTableCreator<ShardingDefaultDbContext> _shardingTableCreator;
|
||||
private readonly IShardingReadWriteManager _shardingReadWriteManager;
|
||||
|
||||
public ShardingTest(ShardingDefaultDbContext virtualDbContext,IShardingRouteManager shardingRouteManager, IConnectionStringManager<ShardingDefaultDbContext> connectionStringManager,IConfiguration configuration,
|
||||
public ShardingTest(ShardingDefaultDbContext virtualDbContext,IShardingRouteManager shardingRouteManager, IConfiguration configuration,
|
||||
IEntityMetadataManager<ShardingDefaultDbContext> entityMetadataManager,
|
||||
IShardingComparer<ShardingDefaultDbContext> shardingComparer,IVirtualDataSource<ShardingDefaultDbContext> virtualDataSource,
|
||||
IVirtualTableManager<ShardingDefaultDbContext> virtualTableManager,
|
||||
IShardingTableCreator<ShardingDefaultDbContext> shardingTableCreator)
|
||||
IShardingTableCreator<ShardingDefaultDbContext> shardingTableCreator, IShardingReadWriteManager shardingReadWriteManager)
|
||||
{
|
||||
_virtualDbContext = virtualDbContext;
|
||||
_shardingRouteManager = shardingRouteManager;
|
||||
_connectionStringManager = connectionStringManager;
|
||||
_connectionStringManager = new ActualConnectionStringManager<ShardingDefaultDbContext>();
|
||||
_configuration = configuration;
|
||||
this._entityMetadataManager = entityMetadataManager;
|
||||
_shardingComparer = shardingComparer;
|
||||
_virtualDataSource = virtualDataSource;
|
||||
_virtualTableManager = virtualTableManager;
|
||||
_shardingTableCreator = shardingTableCreator;
|
||||
_shardingReadWriteManager = shardingReadWriteManager;
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
@ -124,7 +128,24 @@ namespace ShardingCore.Test2x
|
|||
}
|
||||
|
||||
await _virtualDbContext.AddRangeAsync(logDays);
|
||||
_virtualDbContext.AddRange(logDays);
|
||||
var bulkShardingExpression = _virtualDbContext.BulkShardingExpression<ShardingDefaultDbContext, Order>(o => new[] { "A", "B" }.Contains(o.Area));
|
||||
Assert.Equal(2, bulkShardingExpression.Count);
|
||||
Assert.True(bulkShardingExpression.ContainsKey("A"));
|
||||
Assert.True(bulkShardingExpression.ContainsKey("B"));
|
||||
|
||||
var bulkShardingTableExpression = _virtualDbContext.BulkShardingTableExpression<ShardingDefaultDbContext, SysUserMod>(o => o.Id == Guid.NewGuid().ToString());
|
||||
Assert.Equal(1, bulkShardingTableExpression.Count());
|
||||
|
||||
var isShardingDbContext = _virtualDbContext.IsShardingDbContext();
|
||||
Assert.True(isShardingDbContext);
|
||||
var isShardingTableDbContext = _virtualDbContext.IsShardingTableDbContext();
|
||||
Assert.True(isShardingTableDbContext);
|
||||
var shardingDbContext = _virtualDbContext.GetType().IsShardingDbContext();
|
||||
Assert.True(shardingDbContext);
|
||||
var shardingTableDbContext = _virtualDbContext.GetType().IsShardingTableDbContext();
|
||||
Assert.True(shardingTableDbContext);
|
||||
var virtualTable = _virtualTableManager.GetVirtualTable<SysUserMod>();
|
||||
Assert.NotNull(virtualTable);
|
||||
|
||||
}
|
||||
|
||||
|
@ -169,8 +190,10 @@ namespace ShardingCore.Test2x
|
|||
[Fact]
|
||||
public void TestConnectionStringManager()
|
||||
{
|
||||
var connectionString = _connectionStringManager.GetConnectionString(_virtualDataSource.DefaultDataSourceName);
|
||||
Assert.Equal(connectionString, "Data Source=localhost;Initial Catalog=ShardingCoreDBA;Integrated Security=True;");
|
||||
_virtualDbContext.ReadWriteSeparationReadOnly();
|
||||
var connectionString1 = _connectionStringManager.GetConnectionString(_virtualDataSource.DefaultDataSourceName, true);
|
||||
Assert.Equal(connectionString1, "Data Source=localhost;Initial Catalog=ShardingCoreDBA;Integrated Security=True;");
|
||||
_virtualDbContext.ReadWriteSeparationWriteOnly();
|
||||
}
|
||||
//[Fact]
|
||||
//public async Task Route_TEST()
|
||||
|
@ -838,6 +861,57 @@ namespace ShardingCore.Test2x
|
|||
var z1 = await _virtualDbContext.Set<Order>().SingleAsync(o => o.Money == 13);
|
||||
Assert.Equal(z, z1);
|
||||
}
|
||||
[Fact]
|
||||
public async Task OrderReadWrite()
|
||||
{
|
||||
//切换到只读数据库,只读数据库又只配置了A数据源读取B数据源
|
||||
_virtualDbContext.ReadWriteSeparationReadOnly();
|
||||
var list = await _virtualDbContext.Set<Order>().Where(o => o.Money == 1).ToListAsync();
|
||||
Assert.Equal(2, list.Count);
|
||||
|
||||
_virtualDbContext.ReadWriteSeparationWriteOnly();
|
||||
using (_shardingRouteManager.CreateScope())
|
||||
{
|
||||
_shardingRouteManager.Current.TryCreateOrAddMustDataSource<Order>("A");
|
||||
var areaB = await _virtualDbContext.Set<Order>().Where(o => o.Area == "B").FirstOrDefaultAsync();
|
||||
Assert.Null(areaB);
|
||||
}
|
||||
_virtualDbContext.ReadWriteSeparationReadOnly();
|
||||
using (_shardingRouteManager.CreateScope())
|
||||
{
|
||||
_shardingRouteManager.Current.TryCreateOrAddMustDataSource<Order>("A");
|
||||
var areaB = await _virtualDbContext.Set<Order>().Where(o => o.Area == "B").FirstOrDefaultAsync();
|
||||
Assert.NotNull(areaB);
|
||||
}
|
||||
_virtualDbContext.ReadWriteSeparationWriteOnly();
|
||||
using (_shardingReadWriteManager.CreateScope<ShardingDefaultDbContext>())
|
||||
{
|
||||
_shardingReadWriteManager.GetCurrent<ShardingDefaultDbContext>().SetReadWriteSeparation(100, true);
|
||||
using (_shardingRouteManager.CreateScope())
|
||||
{
|
||||
_shardingRouteManager.Current.TryCreateOrAddMustDataSource<Order>("A");
|
||||
var areaB = await _virtualDbContext.Set<Order>().Where(o => o.Area == "B").FirstOrDefaultAsync();
|
||||
Assert.NotNull(areaB);
|
||||
}
|
||||
}
|
||||
using (_shardingReadWriteManager.CreateScope<ShardingDefaultDbContext>())
|
||||
{
|
||||
_shardingReadWriteManager.GetCurrent<ShardingDefaultDbContext>().SetReadWriteSeparation(100, true);
|
||||
_virtualDbContext.ReadWriteSeparationWriteOnly();
|
||||
using (_shardingRouteManager.CreateScope())
|
||||
{
|
||||
_shardingRouteManager.Current.TryCreateOrAddMustDataSource<Order>("A");
|
||||
var areaB = await _virtualDbContext.Set<Order>().Where(o => o.Area == "B").FirstOrDefaultAsync();
|
||||
Assert.Null(areaB);
|
||||
}
|
||||
}
|
||||
using (_shardingRouteManager.CreateScope())
|
||||
{
|
||||
_shardingRouteManager.Current.TryCreateOrAddMustDataSource<Order>("A");
|
||||
var areaB = await _virtualDbContext.Set<Order>().Where(o => o.Area == "B").FirstOrDefaultAsync();
|
||||
Assert.Null(areaB);
|
||||
}
|
||||
}
|
||||
// [Fact]
|
||||
// public async Task Group_API_Test()
|
||||
// {
|
||||
|
|
|
@ -15,6 +15,7 @@ using ShardingCore.Exceptions;
|
|||
using ShardingCore.Extensions;
|
||||
using ShardingCore.Extensions.ShardingPageExtensions;
|
||||
using ShardingCore.Sharding.Abstractions;
|
||||
using ShardingCore.Sharding.ReadWriteConfigurations.Abstractions;
|
||||
using ShardingCore.Sharding.ShardingComparision.Abstractions;
|
||||
using ShardingCore.TableCreator;
|
||||
using ShardingCore.Test2x.Domain.Entities;
|
||||
|
@ -28,29 +29,29 @@ namespace ShardingCore.Test2x
|
|||
{
|
||||
private readonly ShardingDefaultDbContext _virtualDbContext;
|
||||
private readonly IShardingRouteManager _shardingRouteManager;
|
||||
private readonly IConnectionStringManager<ShardingDefaultDbContext> _connectionStringManager;
|
||||
private readonly IConfiguration _configuration;
|
||||
private readonly IEntityMetadataManager<ShardingDefaultDbContext> _entityMetadataManager;
|
||||
private readonly IShardingComparer<ShardingDefaultDbContext> _shardingComparer;
|
||||
private readonly IVirtualDataSource<ShardingDefaultDbContext> _virtualDataSource;
|
||||
private readonly IVirtualTableManager<ShardingDefaultDbContext> _virtualTableManager;
|
||||
private readonly IShardingTableCreator<ShardingDefaultDbContext> _shardingTableCreator;
|
||||
private readonly IShardingReadWriteManager _shardingReadWriteManager;
|
||||
|
||||
public ShardingTestSync(ShardingDefaultDbContext virtualDbContext, IShardingRouteManager shardingRouteManager, IConnectionStringManager<ShardingDefaultDbContext> connectionStringManager, IConfiguration configuration,
|
||||
public ShardingTestSync(ShardingDefaultDbContext virtualDbContext, IShardingRouteManager shardingRouteManager, IConfiguration configuration,
|
||||
IEntityMetadataManager<ShardingDefaultDbContext> entityMetadataManager,
|
||||
IShardingComparer<ShardingDefaultDbContext> shardingComparer, IVirtualDataSource<ShardingDefaultDbContext> virtualDataSource,
|
||||
IVirtualTableManager<ShardingDefaultDbContext> virtualTableManager,
|
||||
IShardingTableCreator<ShardingDefaultDbContext> shardingTableCreator)
|
||||
IShardingTableCreator<ShardingDefaultDbContext> shardingTableCreator, IShardingReadWriteManager shardingReadWriteManager)
|
||||
{
|
||||
_virtualDbContext = virtualDbContext;
|
||||
_shardingRouteManager = shardingRouteManager;
|
||||
_connectionStringManager = connectionStringManager;
|
||||
_configuration = configuration;
|
||||
this._entityMetadataManager = entityMetadataManager;
|
||||
_shardingComparer = shardingComparer;
|
||||
_virtualDataSource = virtualDataSource;
|
||||
_virtualTableManager = virtualTableManager;
|
||||
_shardingTableCreator = shardingTableCreator;
|
||||
_shardingReadWriteManager = shardingReadWriteManager;
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
@ -120,6 +121,24 @@ namespace ShardingCore.Test2x
|
|||
}
|
||||
|
||||
_virtualDbContext.AddRange(logDays);
|
||||
var bulkShardingExpression = _virtualDbContext.BulkShardingExpression<ShardingDefaultDbContext, Order>(o => new[] { "A", "B" }.Contains(o.Area));
|
||||
Assert.Equal(2, bulkShardingExpression.Count);
|
||||
Assert.True(bulkShardingExpression.ContainsKey("A"));
|
||||
Assert.True(bulkShardingExpression.ContainsKey("B"));
|
||||
|
||||
var bulkShardingTableExpression = _virtualDbContext.BulkShardingTableExpression<ShardingDefaultDbContext, SysUserMod>(o => o.Id == Guid.NewGuid().ToString());
|
||||
Assert.Equal(1, bulkShardingTableExpression.Count());
|
||||
|
||||
var isShardingDbContext = _virtualDbContext.IsShardingDbContext();
|
||||
Assert.True(isShardingDbContext);
|
||||
var isShardingTableDbContext = _virtualDbContext.IsShardingTableDbContext();
|
||||
Assert.True(isShardingTableDbContext);
|
||||
var shardingDbContext = _virtualDbContext.GetType().IsShardingDbContext();
|
||||
Assert.True(shardingDbContext);
|
||||
var shardingTableDbContext = _virtualDbContext.GetType().IsShardingTableDbContext();
|
||||
Assert.True(shardingTableDbContext);
|
||||
var virtualTable = _virtualTableManager.GetVirtualTable<SysUserMod>();
|
||||
Assert.NotNull(virtualTable);
|
||||
|
||||
}
|
||||
|
||||
|
@ -161,12 +180,6 @@ namespace ShardingCore.Test2x
|
|||
var compare1 = _shardingComparer.Compare(x, y, true);
|
||||
Assert.True(compare1 < 0);
|
||||
}
|
||||
[Fact]
|
||||
public void TestConnectionStringManager()
|
||||
{
|
||||
var connectionString = _connectionStringManager.GetConnectionString(_virtualDataSource.DefaultDataSourceName);
|
||||
Assert.Equal(connectionString, "Data Source=localhost;Initial Catalog=ShardingCoreDBA;Integrated Security=True;");
|
||||
}
|
||||
//[Fact]
|
||||
//public void Route_TEST()
|
||||
//{
|
||||
|
@ -831,6 +844,47 @@ namespace ShardingCore.Test2x
|
|||
var z1 = _virtualDbContext.Set<Order>().Single(o => o.Money == 13);
|
||||
Assert.Equal(z, z1);
|
||||
}
|
||||
[Fact]
|
||||
public void OrderReadWrite()
|
||||
{
|
||||
//切换到只读数据库,只读数据库又只配置了A数据源读取B数据源
|
||||
_virtualDbContext.ReadWriteSeparationReadOnly();
|
||||
var list = _virtualDbContext.Set<Order>().Where(o => o.Money == 1).ToList();
|
||||
Assert.Equal(2, list.Count);
|
||||
|
||||
_virtualDbContext.ReadWriteSeparationWriteOnly();
|
||||
using (_shardingRouteManager.CreateScope())
|
||||
{
|
||||
_shardingRouteManager.Current.TryCreateOrAddMustDataSource<Order>("A");
|
||||
var areaB = _virtualDbContext.Set<Order>().Where(o => o.Area == "B").FirstOrDefault();
|
||||
Assert.Null(areaB);
|
||||
}
|
||||
_virtualDbContext.ReadWriteSeparationReadOnly();
|
||||
using (_shardingRouteManager.CreateScope())
|
||||
{
|
||||
_shardingRouteManager.Current.TryCreateOrAddMustDataSource<Order>("A");
|
||||
var areaB = _virtualDbContext.Set<Order>().Where(o => o.Area == "B").FirstOrDefault();
|
||||
Assert.NotNull(areaB);
|
||||
}
|
||||
_virtualDbContext.ReadWriteSeparationWriteOnly();
|
||||
using (_shardingReadWriteManager.CreateScope<ShardingDefaultDbContext>())
|
||||
{
|
||||
_shardingReadWriteManager.GetCurrent<ShardingDefaultDbContext>().SetReadWriteSeparation(100, true);
|
||||
_virtualDbContext.ReadWriteSeparationWriteOnly();
|
||||
using (_shardingRouteManager.CreateScope())
|
||||
{
|
||||
_shardingRouteManager.Current.TryCreateOrAddMustDataSource<Order>("A");
|
||||
var areaB = _virtualDbContext.Set<Order>().Where(o => o.Area == "B").FirstOrDefault();
|
||||
Assert.Null(areaB);
|
||||
}
|
||||
}
|
||||
using (_shardingRouteManager.CreateScope())
|
||||
{
|
||||
_shardingRouteManager.Current.TryCreateOrAddMustDataSource<Order>("A");
|
||||
var areaB = _virtualDbContext.Set<Order>().Where(o => o.Area == "B").FirstOrDefault();
|
||||
Assert.Null(areaB);
|
||||
}
|
||||
}
|
||||
// [Fact]
|
||||
// public void Group_API_Test()
|
||||
// {
|
||||
|
|
|
@ -7,6 +7,7 @@ using Microsoft.Extensions.DependencyInjection;
|
|||
using Microsoft.Extensions.Hosting;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using ShardingCore.Bootstrapers;
|
||||
using ShardingCore.Sharding.ReadWriteConfigurations;
|
||||
using ShardingCore.Test2x.Domain.Entities;
|
||||
using ShardingCore.Test2x.Shardings;
|
||||
|
||||
|
@ -60,7 +61,18 @@ namespace ShardingCore.Test2x
|
|||
op.AddShardingTableRoute<SysUserSalaryVirtualTableRoute>();
|
||||
op.AddShardingTableRoute<OrderCreateTimeVirtualTableRoute>();
|
||||
op.AddShardingTableRoute<LogDayVirtualTableRoute>();
|
||||
}).End();
|
||||
}).AddReadWriteSeparation(sp =>
|
||||
{
|
||||
return new Dictionary<string, ISet<string>>()
|
||||
{
|
||||
{
|
||||
"A", new HashSet<string>()
|
||||
{
|
||||
"Data Source=localhost;Initial Catalog=ShardingCoreDBB;Integrated Security=True;"
|
||||
}
|
||||
}
|
||||
};
|
||||
}, ReadStrategyEnum.Loop, readConnStringGetStrategy: ReadConnStringGetStrategyEnum.LatestEveryTime).End();
|
||||
// services.AddShardingDbContext<ShardingDefaultDbContext, DefaultDbContext>(o => o.UseMySql(hostBuilderContext.Configuration.GetSection("MySql")["ConnectionString"],new MySqlServerVersion("5.7.15"))
|
||||
// ,op =>
|
||||
// {
|
||||
|
|
|
@ -14,7 +14,9 @@ using ShardingCore.Core.VirtualDatabase.VirtualTables;
|
|||
using ShardingCore.Exceptions;
|
||||
using ShardingCore.Extensions;
|
||||
using ShardingCore.Extensions.ShardingPageExtensions;
|
||||
using ShardingCore.Sharding;
|
||||
using ShardingCore.Sharding.Abstractions;
|
||||
using ShardingCore.Sharding.ReadWriteConfigurations.Abstractions;
|
||||
using ShardingCore.Sharding.ShardingComparision.Abstractions;
|
||||
using ShardingCore.TableCreator;
|
||||
using ShardingCore.Test3x.Domain.Entities;
|
||||
|
@ -32,29 +34,31 @@ namespace ShardingCore.Test3x
|
|||
{
|
||||
private readonly ShardingDefaultDbContext _virtualDbContext;
|
||||
private readonly IShardingRouteManager _shardingRouteManager;
|
||||
private readonly IConnectionStringManager<ShardingDefaultDbContext> _connectionStringManager;
|
||||
private readonly ActualConnectionStringManager<ShardingDefaultDbContext> _connectionStringManager;
|
||||
private readonly IConfiguration _configuration;
|
||||
private readonly IEntityMetadataManager<ShardingDefaultDbContext> _entityMetadataManager;
|
||||
private readonly IShardingComparer<ShardingDefaultDbContext> _shardingComparer;
|
||||
private readonly IVirtualDataSource<ShardingDefaultDbContext> _virtualDataSource;
|
||||
private readonly IVirtualTableManager<ShardingDefaultDbContext> _virtualTableManager;
|
||||
private readonly IShardingTableCreator<ShardingDefaultDbContext> _shardingTableCreator;
|
||||
private readonly IShardingReadWriteManager _shardingReadWriteManager;
|
||||
|
||||
public ShardingTest(ShardingDefaultDbContext virtualDbContext,IShardingRouteManager shardingRouteManager, IConnectionStringManager<ShardingDefaultDbContext> connectionStringManager,IConfiguration configuration,
|
||||
public ShardingTest(ShardingDefaultDbContext virtualDbContext,IShardingRouteManager shardingRouteManager,IConfiguration configuration,
|
||||
IEntityMetadataManager<ShardingDefaultDbContext> entityMetadataManager,
|
||||
IShardingComparer<ShardingDefaultDbContext> shardingComparer,IVirtualDataSource<ShardingDefaultDbContext> virtualDataSource,
|
||||
IVirtualTableManager<ShardingDefaultDbContext> virtualTableManager,
|
||||
IShardingTableCreator<ShardingDefaultDbContext> shardingTableCreator)
|
||||
IShardingTableCreator<ShardingDefaultDbContext> shardingTableCreator, IShardingReadWriteManager shardingReadWriteManager)
|
||||
{
|
||||
_virtualDbContext = virtualDbContext;
|
||||
_shardingRouteManager = shardingRouteManager;
|
||||
_connectionStringManager = connectionStringManager;
|
||||
_connectionStringManager = new ActualConnectionStringManager<ShardingDefaultDbContext>();
|
||||
_configuration = configuration;
|
||||
this._entityMetadataManager = entityMetadataManager;
|
||||
_shardingComparer = shardingComparer;
|
||||
_virtualDataSource = virtualDataSource;
|
||||
_virtualTableManager = virtualTableManager;
|
||||
_shardingTableCreator = shardingTableCreator;
|
||||
_shardingReadWriteManager = shardingReadWriteManager;
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
@ -124,7 +128,24 @@ namespace ShardingCore.Test3x
|
|||
}
|
||||
|
||||
await _virtualDbContext.AddRangeAsync(logDays);
|
||||
_virtualDbContext.AddRange(logDays);
|
||||
var bulkShardingExpression = _virtualDbContext.BulkShardingExpression<ShardingDefaultDbContext, Order>(o => new[] { "A", "B" }.Contains(o.Area));
|
||||
Assert.Equal(2, bulkShardingExpression.Count);
|
||||
Assert.True(bulkShardingExpression.ContainsKey("A"));
|
||||
Assert.True(bulkShardingExpression.ContainsKey("B"));
|
||||
|
||||
var bulkShardingTableExpression = _virtualDbContext.BulkShardingTableExpression<ShardingDefaultDbContext, SysUserMod>(o => o.Id == Guid.NewGuid().ToString());
|
||||
Assert.Equal(1, bulkShardingTableExpression.Count());
|
||||
|
||||
var isShardingDbContext = _virtualDbContext.IsShardingDbContext();
|
||||
Assert.True(isShardingDbContext);
|
||||
var isShardingTableDbContext = _virtualDbContext.IsShardingTableDbContext();
|
||||
Assert.True(isShardingTableDbContext);
|
||||
var shardingDbContext = _virtualDbContext.GetType().IsShardingDbContext();
|
||||
Assert.True(shardingDbContext);
|
||||
var shardingTableDbContext = _virtualDbContext.GetType().IsShardingTableDbContext();
|
||||
Assert.True(shardingTableDbContext);
|
||||
var virtualTable = _virtualTableManager.GetVirtualTable<SysUserMod>();
|
||||
Assert.NotNull(virtualTable);
|
||||
|
||||
}
|
||||
|
||||
|
@ -169,8 +190,10 @@ namespace ShardingCore.Test3x
|
|||
[Fact]
|
||||
public void TestConnectionStringManager()
|
||||
{
|
||||
var connectionString = _connectionStringManager.GetConnectionString(_virtualDataSource.DefaultDataSourceName);
|
||||
Assert.Equal(connectionString, "Data Source=localhost;Initial Catalog=ShardingCoreDBA;Integrated Security=True;");
|
||||
_virtualDbContext.ReadWriteSeparationReadOnly();
|
||||
var connectionString1 = _connectionStringManager.GetConnectionString(_virtualDataSource.DefaultDataSourceName, true);
|
||||
Assert.Equal(connectionString1, "Data Source=localhost;Initial Catalog=ShardingCoreDBA;Integrated Security=True;");
|
||||
_virtualDbContext.ReadWriteSeparationWriteOnly();
|
||||
}
|
||||
//[Fact]
|
||||
//public async Task Route_TEST()
|
||||
|
@ -838,6 +861,57 @@ namespace ShardingCore.Test3x
|
|||
var z1 = await _virtualDbContext.Set<Order>().SingleAsync(o => o.Money == 13);
|
||||
Assert.Equal(z, z1);
|
||||
}
|
||||
[Fact]
|
||||
public async Task OrderReadWrite()
|
||||
{
|
||||
//切换到只读数据库,只读数据库又只配置了A数据源读取B数据源
|
||||
_virtualDbContext.ReadWriteSeparationReadOnly();
|
||||
var list = await _virtualDbContext.Set<Order>().Where(o => o.Money == 1).ToListAsync();
|
||||
Assert.Equal(2, list.Count);
|
||||
|
||||
_virtualDbContext.ReadWriteSeparationWriteOnly();
|
||||
using (_shardingRouteManager.CreateScope())
|
||||
{
|
||||
_shardingRouteManager.Current.TryCreateOrAddMustDataSource<Order>("A");
|
||||
var areaB = await _virtualDbContext.Set<Order>().Where(o => o.Area == "B").FirstOrDefaultAsync();
|
||||
Assert.Null(areaB);
|
||||
}
|
||||
_virtualDbContext.ReadWriteSeparationReadOnly();
|
||||
using (_shardingRouteManager.CreateScope())
|
||||
{
|
||||
_shardingRouteManager.Current.TryCreateOrAddMustDataSource<Order>("A");
|
||||
var areaB = await _virtualDbContext.Set<Order>().Where(o => o.Area == "B").FirstOrDefaultAsync();
|
||||
Assert.NotNull(areaB);
|
||||
}
|
||||
_virtualDbContext.ReadWriteSeparationWriteOnly();
|
||||
using (_shardingReadWriteManager.CreateScope<ShardingDefaultDbContext>())
|
||||
{
|
||||
_shardingReadWriteManager.GetCurrent<ShardingDefaultDbContext>().SetReadWriteSeparation(100, true);
|
||||
using (_shardingRouteManager.CreateScope())
|
||||
{
|
||||
_shardingRouteManager.Current.TryCreateOrAddMustDataSource<Order>("A");
|
||||
var areaB = await _virtualDbContext.Set<Order>().Where(o => o.Area == "B").FirstOrDefaultAsync();
|
||||
Assert.NotNull(areaB);
|
||||
}
|
||||
}
|
||||
using (_shardingReadWriteManager.CreateScope<ShardingDefaultDbContext>())
|
||||
{
|
||||
_shardingReadWriteManager.GetCurrent<ShardingDefaultDbContext>().SetReadWriteSeparation(100, true);
|
||||
_virtualDbContext.ReadWriteSeparationWriteOnly();
|
||||
using (_shardingRouteManager.CreateScope())
|
||||
{
|
||||
_shardingRouteManager.Current.TryCreateOrAddMustDataSource<Order>("A");
|
||||
var areaB =await _virtualDbContext.Set<Order>().Where(o => o.Area == "B").FirstOrDefaultAsync();
|
||||
Assert.Null(areaB);
|
||||
}
|
||||
}
|
||||
using (_shardingRouteManager.CreateScope())
|
||||
{
|
||||
_shardingRouteManager.Current.TryCreateOrAddMustDataSource<Order>("A");
|
||||
var areaB = await _virtualDbContext.Set<Order>().Where(o => o.Area == "B").FirstOrDefaultAsync();
|
||||
Assert.Null(areaB);
|
||||
}
|
||||
}
|
||||
// [Fact]
|
||||
// public async Task Group_API_Test()
|
||||
// {
|
||||
|
|
|
@ -14,7 +14,9 @@ using ShardingCore.Core.VirtualDatabase.VirtualTables;
|
|||
using ShardingCore.Exceptions;
|
||||
using ShardingCore.Extensions;
|
||||
using ShardingCore.Extensions.ShardingPageExtensions;
|
||||
using ShardingCore.Sharding;
|
||||
using ShardingCore.Sharding.Abstractions;
|
||||
using ShardingCore.Sharding.ReadWriteConfigurations.Abstractions;
|
||||
using ShardingCore.Sharding.ShardingComparision.Abstractions;
|
||||
using ShardingCore.TableCreator;
|
||||
using ShardingCore.Test3x.Domain.Entities;
|
||||
|
@ -28,29 +30,31 @@ namespace ShardingCore.Test3x
|
|||
{
|
||||
private readonly ShardingDefaultDbContext _virtualDbContext;
|
||||
private readonly IShardingRouteManager _shardingRouteManager;
|
||||
private readonly IConnectionStringManager<ShardingDefaultDbContext> _connectionStringManager;
|
||||
private readonly ActualConnectionStringManager<ShardingDefaultDbContext> _connectionStringManager;
|
||||
private readonly IConfiguration _configuration;
|
||||
private readonly IEntityMetadataManager<ShardingDefaultDbContext> _entityMetadataManager;
|
||||
private readonly IShardingComparer<ShardingDefaultDbContext> _shardingComparer;
|
||||
private readonly IVirtualDataSource<ShardingDefaultDbContext> _virtualDataSource;
|
||||
private readonly IVirtualTableManager<ShardingDefaultDbContext> _virtualTableManager;
|
||||
private readonly IShardingTableCreator<ShardingDefaultDbContext> _shardingTableCreator;
|
||||
private readonly IShardingReadWriteManager _shardingReadWriteManager;
|
||||
|
||||
public ShardingTestSync(ShardingDefaultDbContext virtualDbContext, IShardingRouteManager shardingRouteManager, IConnectionStringManager<ShardingDefaultDbContext> connectionStringManager, IConfiguration configuration,
|
||||
public ShardingTestSync(ShardingDefaultDbContext virtualDbContext, IShardingRouteManager shardingRouteManager, IConfiguration configuration,
|
||||
IEntityMetadataManager<ShardingDefaultDbContext> entityMetadataManager,
|
||||
IShardingComparer<ShardingDefaultDbContext> shardingComparer, IVirtualDataSource<ShardingDefaultDbContext> virtualDataSource,
|
||||
IVirtualTableManager<ShardingDefaultDbContext> virtualTableManager,
|
||||
IShardingTableCreator<ShardingDefaultDbContext> shardingTableCreator)
|
||||
IShardingTableCreator<ShardingDefaultDbContext> shardingTableCreator, IShardingReadWriteManager shardingReadWriteManager)
|
||||
{
|
||||
_virtualDbContext = virtualDbContext;
|
||||
_shardingRouteManager = shardingRouteManager;
|
||||
_connectionStringManager = connectionStringManager;
|
||||
_connectionStringManager = new ActualConnectionStringManager<ShardingDefaultDbContext>();
|
||||
_configuration = configuration;
|
||||
this._entityMetadataManager = entityMetadataManager;
|
||||
_shardingComparer = shardingComparer;
|
||||
_virtualDataSource = virtualDataSource;
|
||||
_virtualTableManager = virtualTableManager;
|
||||
_shardingTableCreator = shardingTableCreator;
|
||||
_shardingReadWriteManager = shardingReadWriteManager;
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
@ -120,6 +124,24 @@ namespace ShardingCore.Test3x
|
|||
}
|
||||
|
||||
_virtualDbContext.AddRange(logDays);
|
||||
var bulkShardingExpression = _virtualDbContext.BulkShardingExpression<ShardingDefaultDbContext, Order>(o => new[] { "A", "B" }.Contains(o.Area));
|
||||
Assert.Equal(2, bulkShardingExpression.Count);
|
||||
Assert.True(bulkShardingExpression.ContainsKey("A"));
|
||||
Assert.True(bulkShardingExpression.ContainsKey("B"));
|
||||
|
||||
var bulkShardingTableExpression = _virtualDbContext.BulkShardingTableExpression<ShardingDefaultDbContext, SysUserMod>(o => o.Id == Guid.NewGuid().ToString());
|
||||
Assert.Equal(1, bulkShardingTableExpression.Count());
|
||||
|
||||
var isShardingDbContext = _virtualDbContext.IsShardingDbContext();
|
||||
Assert.True(isShardingDbContext);
|
||||
var isShardingTableDbContext = _virtualDbContext.IsShardingTableDbContext();
|
||||
Assert.True(isShardingTableDbContext);
|
||||
var shardingDbContext = _virtualDbContext.GetType().IsShardingDbContext();
|
||||
Assert.True(shardingDbContext);
|
||||
var shardingTableDbContext = _virtualDbContext.GetType().IsShardingTableDbContext();
|
||||
Assert.True(shardingTableDbContext);
|
||||
var virtualTable = _virtualTableManager.GetVirtualTable<SysUserMod>();
|
||||
Assert.NotNull(virtualTable);
|
||||
|
||||
}
|
||||
|
||||
|
@ -164,8 +186,10 @@ namespace ShardingCore.Test3x
|
|||
[Fact]
|
||||
public void TestConnectionStringManager()
|
||||
{
|
||||
var connectionString = _connectionStringManager.GetConnectionString(_virtualDataSource.DefaultDataSourceName);
|
||||
_virtualDbContext.ReadWriteSeparationReadOnly();
|
||||
var connectionString = _connectionStringManager.GetConnectionString(_virtualDataSource.DefaultDataSourceName,true);
|
||||
Assert.Equal(connectionString, "Data Source=localhost;Initial Catalog=ShardingCoreDBA;Integrated Security=True;");
|
||||
_virtualDbContext.ReadWriteSeparationWriteOnly();
|
||||
}
|
||||
//[Fact]
|
||||
//public void Route_TEST()
|
||||
|
@ -831,6 +855,57 @@ namespace ShardingCore.Test3x
|
|||
var z1 = _virtualDbContext.Set<Order>().Single(o => o.Money == 13);
|
||||
Assert.Equal(z, z1);
|
||||
}
|
||||
[Fact]
|
||||
public void OrderReadWrite()
|
||||
{
|
||||
//切换到只读数据库,只读数据库又只配置了A数据源读取B数据源
|
||||
_virtualDbContext.ReadWriteSeparationReadOnly();
|
||||
var list = _virtualDbContext.Set<Order>().Where(o => o.Money == 1).ToList();
|
||||
Assert.Equal(2, list.Count);
|
||||
|
||||
_virtualDbContext.ReadWriteSeparationWriteOnly();
|
||||
using (_shardingRouteManager.CreateScope())
|
||||
{
|
||||
_shardingRouteManager.Current.TryCreateOrAddMustDataSource<Order>("A");
|
||||
var areaB = _virtualDbContext.Set<Order>().Where(o => o.Area == "B").FirstOrDefault();
|
||||
Assert.Null(areaB);
|
||||
}
|
||||
_virtualDbContext.ReadWriteSeparationReadOnly();
|
||||
using (_shardingRouteManager.CreateScope())
|
||||
{
|
||||
_shardingRouteManager.Current.TryCreateOrAddMustDataSource<Order>("A");
|
||||
var areaB = _virtualDbContext.Set<Order>().Where(o => o.Area == "B").FirstOrDefault();
|
||||
Assert.NotNull(areaB);
|
||||
}
|
||||
_virtualDbContext.ReadWriteSeparationWriteOnly();
|
||||
using (_shardingReadWriteManager.CreateScope<ShardingDefaultDbContext>())
|
||||
{
|
||||
_shardingReadWriteManager.GetCurrent<ShardingDefaultDbContext>().SetReadWriteSeparation(100, true);
|
||||
using (_shardingRouteManager.CreateScope())
|
||||
{
|
||||
_shardingRouteManager.Current.TryCreateOrAddMustDataSource<Order>("A");
|
||||
var areaB = _virtualDbContext.Set<Order>().Where(o => o.Area == "B").FirstOrDefault();
|
||||
Assert.NotNull(areaB);
|
||||
}
|
||||
}
|
||||
using (_shardingReadWriteManager.CreateScope<ShardingDefaultDbContext>())
|
||||
{
|
||||
_shardingReadWriteManager.GetCurrent<ShardingDefaultDbContext>().SetReadWriteSeparation(100, true);
|
||||
_virtualDbContext.ReadWriteSeparationWriteOnly();
|
||||
using (_shardingRouteManager.CreateScope())
|
||||
{
|
||||
_shardingRouteManager.Current.TryCreateOrAddMustDataSource<Order>("A");
|
||||
var areaB = _virtualDbContext.Set<Order>().Where(o => o.Area == "B").FirstOrDefault();
|
||||
Assert.Null(areaB);
|
||||
}
|
||||
}
|
||||
using (_shardingRouteManager.CreateScope())
|
||||
{
|
||||
_shardingRouteManager.Current.TryCreateOrAddMustDataSource<Order>("A");
|
||||
var areaB = _virtualDbContext.Set<Order>().Where(o => o.Area == "B").FirstOrDefault();
|
||||
Assert.Null(areaB);
|
||||
}
|
||||
}
|
||||
// [Fact]
|
||||
// public void Group_API_Test()
|
||||
// {
|
||||
|
|
|
@ -7,6 +7,7 @@ using Microsoft.Extensions.DependencyInjection;
|
|||
using Microsoft.Extensions.Hosting;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using ShardingCore.Bootstrapers;
|
||||
using ShardingCore.Sharding.ReadWriteConfigurations;
|
||||
using ShardingCore.Test3x.Domain.Entities;
|
||||
using ShardingCore.Test3x.Shardings;
|
||||
|
||||
|
@ -60,7 +61,18 @@ namespace ShardingCore.Test3x
|
|||
op.AddShardingTableRoute<SysUserSalaryVirtualTableRoute>();
|
||||
op.AddShardingTableRoute<OrderCreateTimeVirtualTableRoute>();
|
||||
op.AddShardingTableRoute<LogDayVirtualTableRoute>();
|
||||
}).End();
|
||||
}).AddReadWriteSeparation(sp =>
|
||||
{
|
||||
return new Dictionary<string, ISet<string>>()
|
||||
{
|
||||
{
|
||||
"A", new HashSet<string>()
|
||||
{
|
||||
"Data Source=localhost;Initial Catalog=ShardingCoreDBB;Integrated Security=True;"
|
||||
}
|
||||
}
|
||||
};
|
||||
}, ReadStrategyEnum.Loop, readConnStringGetStrategy: ReadConnStringGetStrategyEnum.LatestEveryTime).End();
|
||||
// services.AddShardingDbContext<ShardingDefaultDbContext, DefaultDbContext>(o => o.UseMySql(hostBuilderContext.Configuration.GetSection("MySql")["ConnectionString"],new MySqlServerVersion("5.7.15"))
|
||||
// ,op =>
|
||||
// {
|
||||
|
|
|
@ -14,7 +14,9 @@ using ShardingCore.Core.VirtualDatabase.VirtualTables;
|
|||
using ShardingCore.Exceptions;
|
||||
using ShardingCore.Extensions;
|
||||
using ShardingCore.Extensions.ShardingPageExtensions;
|
||||
using ShardingCore.Sharding;
|
||||
using ShardingCore.Sharding.Abstractions;
|
||||
using ShardingCore.Sharding.ReadWriteConfigurations.Abstractions;
|
||||
using ShardingCore.Sharding.ShardingComparision.Abstractions;
|
||||
using ShardingCore.TableCreator;
|
||||
using ShardingCore.Test5x.Domain.Entities;
|
||||
|
@ -32,29 +34,31 @@ namespace ShardingCore.Test5x
|
|||
{
|
||||
private readonly ShardingDefaultDbContext _virtualDbContext;
|
||||
private readonly IShardingRouteManager _shardingRouteManager;
|
||||
private readonly IConnectionStringManager<ShardingDefaultDbContext> _connectionStringManager;
|
||||
private readonly ActualConnectionStringManager<ShardingDefaultDbContext> _connectionStringManager;
|
||||
private readonly IConfiguration _configuration;
|
||||
private readonly IEntityMetadataManager<ShardingDefaultDbContext> _entityMetadataManager;
|
||||
private readonly IShardingComparer<ShardingDefaultDbContext> _shardingComparer;
|
||||
private readonly IVirtualDataSource<ShardingDefaultDbContext> _virtualDataSource;
|
||||
private readonly IVirtualTableManager<ShardingDefaultDbContext> _virtualTableManager;
|
||||
private readonly IShardingTableCreator<ShardingDefaultDbContext> _shardingTableCreator;
|
||||
private readonly IShardingReadWriteManager _shardingReadWriteManager;
|
||||
|
||||
public ShardingTest(ShardingDefaultDbContext virtualDbContext,IShardingRouteManager shardingRouteManager, IConnectionStringManager<ShardingDefaultDbContext> connectionStringManager,IConfiguration configuration,
|
||||
public ShardingTest(ShardingDefaultDbContext virtualDbContext,IShardingRouteManager shardingRouteManager,IConfiguration configuration,
|
||||
IEntityMetadataManager<ShardingDefaultDbContext> entityMetadataManager,
|
||||
IShardingComparer<ShardingDefaultDbContext> shardingComparer,IVirtualDataSource<ShardingDefaultDbContext> virtualDataSource,
|
||||
IVirtualTableManager<ShardingDefaultDbContext> virtualTableManager,
|
||||
IShardingTableCreator<ShardingDefaultDbContext> shardingTableCreator)
|
||||
IShardingTableCreator<ShardingDefaultDbContext> shardingTableCreator, IShardingReadWriteManager shardingReadWriteManager)
|
||||
{
|
||||
_virtualDbContext = virtualDbContext;
|
||||
_shardingRouteManager = shardingRouteManager;
|
||||
_connectionStringManager = connectionStringManager;
|
||||
_connectionStringManager = new ActualConnectionStringManager<ShardingDefaultDbContext>();
|
||||
_configuration = configuration;
|
||||
this._entityMetadataManager = entityMetadataManager;
|
||||
_shardingComparer = shardingComparer;
|
||||
_virtualDataSource = virtualDataSource;
|
||||
_virtualTableManager = virtualTableManager;
|
||||
_shardingTableCreator = shardingTableCreator;
|
||||
_shardingReadWriteManager = shardingReadWriteManager;
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
@ -124,7 +128,24 @@ namespace ShardingCore.Test5x
|
|||
}
|
||||
|
||||
await _virtualDbContext.AddRangeAsync(logDays);
|
||||
_virtualDbContext.AddRange(logDays);
|
||||
var bulkShardingExpression = _virtualDbContext.BulkShardingExpression<ShardingDefaultDbContext, Order>(o => new[] { "A", "B" }.Contains(o.Area));
|
||||
Assert.Equal(2, bulkShardingExpression.Count);
|
||||
Assert.True(bulkShardingExpression.ContainsKey("A"));
|
||||
Assert.True(bulkShardingExpression.ContainsKey("B"));
|
||||
|
||||
var bulkShardingTableExpression = _virtualDbContext.BulkShardingTableExpression<ShardingDefaultDbContext, SysUserMod>(o => o.Id == Guid.NewGuid().ToString());
|
||||
Assert.Equal(1, bulkShardingTableExpression.Count());
|
||||
|
||||
var isShardingDbContext = _virtualDbContext.IsShardingDbContext();
|
||||
Assert.True(isShardingDbContext);
|
||||
var isShardingTableDbContext = _virtualDbContext.IsShardingTableDbContext();
|
||||
Assert.True(isShardingTableDbContext);
|
||||
var shardingDbContext = _virtualDbContext.GetType().IsShardingDbContext();
|
||||
Assert.True(shardingDbContext);
|
||||
var shardingTableDbContext = _virtualDbContext.GetType().IsShardingTableDbContext();
|
||||
Assert.True(shardingTableDbContext);
|
||||
var virtualTable = _virtualTableManager.GetVirtualTable<SysUserMod>();
|
||||
Assert.NotNull(virtualTable);
|
||||
|
||||
}
|
||||
|
||||
|
@ -169,8 +190,10 @@ namespace ShardingCore.Test5x
|
|||
[Fact]
|
||||
public void TestConnectionStringManager()
|
||||
{
|
||||
var connectionString = _connectionStringManager.GetConnectionString(_virtualDataSource.DefaultDataSourceName);
|
||||
Assert.Equal(connectionString, "Data Source=localhost;Initial Catalog=ShardingCoreDBA;Integrated Security=True;");
|
||||
_virtualDbContext.ReadWriteSeparationReadOnly();
|
||||
var connectionString1 = _connectionStringManager.GetConnectionString(_virtualDataSource.DefaultDataSourceName, true);
|
||||
Assert.Equal(connectionString1, "Data Source=localhost;Initial Catalog=ShardingCoreDBA;Integrated Security=True;");
|
||||
_virtualDbContext.ReadWriteSeparationWriteOnly();
|
||||
}
|
||||
//[Fact]
|
||||
//public async Task Route_TEST()
|
||||
|
@ -838,6 +861,57 @@ namespace ShardingCore.Test5x
|
|||
var z1 = await _virtualDbContext.Set<Order>().SingleAsync(o => o.Money == 13);
|
||||
Assert.Equal(z, z1);
|
||||
}
|
||||
[Fact]
|
||||
public async Task OrderReadWrite()
|
||||
{
|
||||
//切换到只读数据库,只读数据库又只配置了A数据源读取B数据源
|
||||
_virtualDbContext.ReadWriteSeparationReadOnly();
|
||||
var list = await _virtualDbContext.Set<Order>().Where(o => o.Money == 1).ToListAsync();
|
||||
Assert.Equal(2, list.Count);
|
||||
|
||||
_virtualDbContext.ReadWriteSeparationWriteOnly();
|
||||
using (_shardingRouteManager.CreateScope())
|
||||
{
|
||||
_shardingRouteManager.Current.TryCreateOrAddMustDataSource<Order>("A");
|
||||
var areaB = await _virtualDbContext.Set<Order>().Where(o => o.Area == "B").FirstOrDefaultAsync();
|
||||
Assert.Null(areaB);
|
||||
}
|
||||
_virtualDbContext.ReadWriteSeparationReadOnly();
|
||||
using (_shardingRouteManager.CreateScope())
|
||||
{
|
||||
_shardingRouteManager.Current.TryCreateOrAddMustDataSource<Order>("A");
|
||||
var areaB = await _virtualDbContext.Set<Order>().Where(o => o.Area == "B").FirstOrDefaultAsync();
|
||||
Assert.NotNull(areaB);
|
||||
}
|
||||
_virtualDbContext.ReadWriteSeparationWriteOnly();
|
||||
using (_shardingReadWriteManager.CreateScope<ShardingDefaultDbContext>())
|
||||
{
|
||||
_shardingReadWriteManager.GetCurrent<ShardingDefaultDbContext>().SetReadWriteSeparation(100, true);
|
||||
using (_shardingRouteManager.CreateScope())
|
||||
{
|
||||
_shardingRouteManager.Current.TryCreateOrAddMustDataSource<Order>("A");
|
||||
var areaB = await _virtualDbContext.Set<Order>().Where(o => o.Area == "B").FirstOrDefaultAsync();
|
||||
Assert.NotNull(areaB);
|
||||
}
|
||||
}
|
||||
using (_shardingReadWriteManager.CreateScope<ShardingDefaultDbContext>())
|
||||
{
|
||||
_shardingReadWriteManager.GetCurrent<ShardingDefaultDbContext>().SetReadWriteSeparation(100, true);
|
||||
_virtualDbContext.ReadWriteSeparationWriteOnly();
|
||||
using (_shardingRouteManager.CreateScope())
|
||||
{
|
||||
_shardingRouteManager.Current.TryCreateOrAddMustDataSource<Order>("A");
|
||||
var areaB = await _virtualDbContext.Set<Order>().Where(o => o.Area == "B").FirstOrDefaultAsync();
|
||||
Assert.Null(areaB);
|
||||
}
|
||||
}
|
||||
using (_shardingRouteManager.CreateScope())
|
||||
{
|
||||
_shardingRouteManager.Current.TryCreateOrAddMustDataSource<Order>("A");
|
||||
var areaB = await _virtualDbContext.Set<Order>().Where(o => o.Area == "B").FirstOrDefaultAsync();
|
||||
Assert.Null(areaB);
|
||||
}
|
||||
}
|
||||
// [Fact]
|
||||
// public async Task Group_API_Test()
|
||||
// {
|
||||
|
|
|
@ -15,6 +15,7 @@ using ShardingCore.Exceptions;
|
|||
using ShardingCore.Extensions;
|
||||
using ShardingCore.Extensions.ShardingPageExtensions;
|
||||
using ShardingCore.Sharding.Abstractions;
|
||||
using ShardingCore.Sharding.ReadWriteConfigurations.Abstractions;
|
||||
using ShardingCore.Sharding.ShardingComparision.Abstractions;
|
||||
using ShardingCore.TableCreator;
|
||||
using ShardingCore.Test5x.Domain.Entities;
|
||||
|
@ -28,29 +29,29 @@ namespace ShardingCore.Test5x
|
|||
{
|
||||
private readonly ShardingDefaultDbContext _virtualDbContext;
|
||||
private readonly IShardingRouteManager _shardingRouteManager;
|
||||
private readonly IConnectionStringManager<ShardingDefaultDbContext> _connectionStringManager;
|
||||
private readonly IConfiguration _configuration;
|
||||
private readonly IEntityMetadataManager<ShardingDefaultDbContext> _entityMetadataManager;
|
||||
private readonly IShardingComparer<ShardingDefaultDbContext> _shardingComparer;
|
||||
private readonly IVirtualDataSource<ShardingDefaultDbContext> _virtualDataSource;
|
||||
private readonly IVirtualTableManager<ShardingDefaultDbContext> _virtualTableManager;
|
||||
private readonly IShardingTableCreator<ShardingDefaultDbContext> _shardingTableCreator;
|
||||
private readonly IShardingReadWriteManager _shardingReadWriteManager;
|
||||
|
||||
public ShardingTestSync(ShardingDefaultDbContext virtualDbContext, IShardingRouteManager shardingRouteManager, IConnectionStringManager<ShardingDefaultDbContext> connectionStringManager, IConfiguration configuration,
|
||||
public ShardingTestSync(ShardingDefaultDbContext virtualDbContext, IShardingRouteManager shardingRouteManager, IConfiguration configuration,
|
||||
IEntityMetadataManager<ShardingDefaultDbContext> entityMetadataManager,
|
||||
IShardingComparer<ShardingDefaultDbContext> shardingComparer, IVirtualDataSource<ShardingDefaultDbContext> virtualDataSource,
|
||||
IVirtualTableManager<ShardingDefaultDbContext> virtualTableManager,
|
||||
IShardingTableCreator<ShardingDefaultDbContext> shardingTableCreator)
|
||||
IShardingTableCreator<ShardingDefaultDbContext> shardingTableCreator, IShardingReadWriteManager shardingReadWriteManager)
|
||||
{
|
||||
_virtualDbContext = virtualDbContext;
|
||||
_shardingRouteManager = shardingRouteManager;
|
||||
_connectionStringManager = connectionStringManager;
|
||||
_configuration = configuration;
|
||||
this._entityMetadataManager = entityMetadataManager;
|
||||
_shardingComparer = shardingComparer;
|
||||
_virtualDataSource = virtualDataSource;
|
||||
_virtualTableManager = virtualTableManager;
|
||||
_shardingTableCreator = shardingTableCreator;
|
||||
_shardingReadWriteManager = shardingReadWriteManager;
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
@ -120,6 +121,24 @@ namespace ShardingCore.Test5x
|
|||
}
|
||||
|
||||
_virtualDbContext.AddRange(logDays);
|
||||
var bulkShardingExpression = _virtualDbContext.BulkShardingExpression<ShardingDefaultDbContext, Order>(o => new[] { "A", "B" }.Contains(o.Area));
|
||||
Assert.Equal(2, bulkShardingExpression.Count);
|
||||
Assert.True(bulkShardingExpression.ContainsKey("A"));
|
||||
Assert.True(bulkShardingExpression.ContainsKey("B"));
|
||||
|
||||
var bulkShardingTableExpression = _virtualDbContext.BulkShardingTableExpression<ShardingDefaultDbContext, SysUserMod>(o => o.Id == Guid.NewGuid().ToString());
|
||||
Assert.Equal(1, bulkShardingTableExpression.Count());
|
||||
|
||||
var isShardingDbContext = _virtualDbContext.IsShardingDbContext();
|
||||
Assert.True(isShardingDbContext);
|
||||
var isShardingTableDbContext = _virtualDbContext.IsShardingTableDbContext();
|
||||
Assert.True(isShardingTableDbContext);
|
||||
var shardingDbContext = _virtualDbContext.GetType().IsShardingDbContext();
|
||||
Assert.True(shardingDbContext);
|
||||
var shardingTableDbContext = _virtualDbContext.GetType().IsShardingTableDbContext();
|
||||
Assert.True(shardingTableDbContext);
|
||||
var virtualTable = _virtualTableManager.GetVirtualTable<SysUserMod>();
|
||||
Assert.NotNull(virtualTable);
|
||||
|
||||
}
|
||||
|
||||
|
@ -161,12 +180,6 @@ namespace ShardingCore.Test5x
|
|||
var compare1 = _shardingComparer.Compare(x, y, true);
|
||||
Assert.True(compare1 < 0);
|
||||
}
|
||||
[Fact]
|
||||
public void TestConnectionStringManager()
|
||||
{
|
||||
var connectionString = _connectionStringManager.GetConnectionString(_virtualDataSource.DefaultDataSourceName);
|
||||
Assert.Equal(connectionString, "Data Source=localhost;Initial Catalog=ShardingCoreDBA;Integrated Security=True;");
|
||||
}
|
||||
//[Fact]
|
||||
//public void Route_TEST()
|
||||
//{
|
||||
|
@ -831,6 +844,57 @@ namespace ShardingCore.Test5x
|
|||
var z1 = _virtualDbContext.Set<Order>().Single(o => o.Money == 13);
|
||||
Assert.Equal(z, z1);
|
||||
}
|
||||
[Fact]
|
||||
public void OrderReadWrite()
|
||||
{
|
||||
//切换到只读数据库,只读数据库又只配置了A数据源读取B数据源
|
||||
_virtualDbContext.ReadWriteSeparationReadOnly();
|
||||
var list = _virtualDbContext.Set<Order>().Where(o => o.Money == 1).ToList();
|
||||
Assert.Equal(2, list.Count);
|
||||
|
||||
_virtualDbContext.ReadWriteSeparationWriteOnly();
|
||||
using (_shardingRouteManager.CreateScope())
|
||||
{
|
||||
_shardingRouteManager.Current.TryCreateOrAddMustDataSource<Order>("A");
|
||||
var areaB = _virtualDbContext.Set<Order>().Where(o => o.Area == "B").FirstOrDefault();
|
||||
Assert.Null(areaB);
|
||||
}
|
||||
_virtualDbContext.ReadWriteSeparationReadOnly();
|
||||
using (_shardingRouteManager.CreateScope())
|
||||
{
|
||||
_shardingRouteManager.Current.TryCreateOrAddMustDataSource<Order>("A");
|
||||
var areaB = _virtualDbContext.Set<Order>().Where(o => o.Area == "B").FirstOrDefault();
|
||||
Assert.NotNull(areaB);
|
||||
}
|
||||
_virtualDbContext.ReadWriteSeparationWriteOnly();
|
||||
using (_shardingReadWriteManager.CreateScope<ShardingDefaultDbContext>())
|
||||
{
|
||||
_shardingReadWriteManager.GetCurrent<ShardingDefaultDbContext>().SetReadWriteSeparation(100, true);
|
||||
using (_shardingRouteManager.CreateScope())
|
||||
{
|
||||
_shardingRouteManager.Current.TryCreateOrAddMustDataSource<Order>("A");
|
||||
var areaB = _virtualDbContext.Set<Order>().Where(o => o.Area == "B").FirstOrDefault();
|
||||
Assert.NotNull(areaB);
|
||||
}
|
||||
}
|
||||
using (_shardingReadWriteManager.CreateScope<ShardingDefaultDbContext>())
|
||||
{
|
||||
_shardingReadWriteManager.GetCurrent<ShardingDefaultDbContext>().SetReadWriteSeparation(100, true);
|
||||
_virtualDbContext.ReadWriteSeparationWriteOnly();
|
||||
using (_shardingRouteManager.CreateScope())
|
||||
{
|
||||
_shardingRouteManager.Current.TryCreateOrAddMustDataSource<Order>("A");
|
||||
var areaB = _virtualDbContext.Set<Order>().Where(o => o.Area == "B").FirstOrDefault();
|
||||
Assert.Null(areaB);
|
||||
}
|
||||
}
|
||||
using (_shardingRouteManager.CreateScope())
|
||||
{
|
||||
_shardingRouteManager.Current.TryCreateOrAddMustDataSource<Order>("A");
|
||||
var areaB = _virtualDbContext.Set<Order>().Where(o => o.Area == "B").FirstOrDefault();
|
||||
Assert.Null(areaB);
|
||||
}
|
||||
}
|
||||
// [Fact]
|
||||
// public void Group_API_Test()
|
||||
// {
|
||||
|
|
|
@ -8,6 +8,7 @@ using Microsoft.Extensions.DependencyInjection;
|
|||
using Microsoft.Extensions.Hosting;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using ShardingCore.Bootstrapers;
|
||||
using ShardingCore.Sharding.ReadWriteConfigurations;
|
||||
using ShardingCore.Test5x.Domain.Entities;
|
||||
using ShardingCore.Test5x.Shardings;
|
||||
|
||||
|
@ -61,7 +62,18 @@ namespace ShardingCore.Test5x
|
|||
op.AddShardingTableRoute<SysUserSalaryVirtualTableRoute>();
|
||||
op.AddShardingTableRoute<OrderCreateTimeVirtualTableRoute>();
|
||||
op.AddShardingTableRoute<LogDayVirtualTableRoute>();
|
||||
}).End();
|
||||
}).AddReadWriteSeparation(sp =>
|
||||
{
|
||||
return new Dictionary<string, ISet<string>>()
|
||||
{
|
||||
{
|
||||
"A", new HashSet<string>()
|
||||
{
|
||||
"Data Source=localhost;Initial Catalog=ShardingCoreDBB;Integrated Security=True;"
|
||||
}
|
||||
}
|
||||
};
|
||||
}, ReadStrategyEnum.Loop, readConnStringGetStrategy: ReadConnStringGetStrategyEnum.LatestEveryTime).End();
|
||||
// services.AddShardingDbContext<ShardingDefaultDbContext, DefaultDbContext>(o => o.UseMySql(hostBuilderContext.Configuration.GetSection("MySql")["ConnectionString"],new MySqlServerVersion("5.7.15"))
|
||||
// ,op =>
|
||||
// {
|
||||
|
|
|
@ -14,7 +14,9 @@ using ShardingCore.Core.VirtualDatabase.VirtualTables;
|
|||
using ShardingCore.Exceptions;
|
||||
using ShardingCore.Extensions;
|
||||
using ShardingCore.Extensions.ShardingPageExtensions;
|
||||
using ShardingCore.Sharding;
|
||||
using ShardingCore.Sharding.Abstractions;
|
||||
using ShardingCore.Sharding.ReadWriteConfigurations.Abstractions;
|
||||
using ShardingCore.Sharding.ShardingComparision.Abstractions;
|
||||
using ShardingCore.TableCreator;
|
||||
using ShardingCore.Test6x.Domain.Entities;
|
||||
|
@ -32,29 +34,31 @@ namespace ShardingCore.Test6x
|
|||
{
|
||||
private readonly ShardingDefaultDbContext _virtualDbContext;
|
||||
private readonly IShardingRouteManager _shardingRouteManager;
|
||||
private readonly IConnectionStringManager<ShardingDefaultDbContext> _connectionStringManager;
|
||||
private readonly ActualConnectionStringManager<ShardingDefaultDbContext> _connectionStringManager;
|
||||
private readonly IConfiguration _configuration;
|
||||
private readonly IEntityMetadataManager<ShardingDefaultDbContext> _entityMetadataManager;
|
||||
private readonly IShardingComparer<ShardingDefaultDbContext> _shardingComparer;
|
||||
private readonly IVirtualDataSource<ShardingDefaultDbContext> _virtualDataSource;
|
||||
private readonly IVirtualTableManager<ShardingDefaultDbContext> _virtualTableManager;
|
||||
private readonly IShardingTableCreator<ShardingDefaultDbContext> _shardingTableCreator;
|
||||
private readonly IShardingReadWriteManager _shardingReadWriteManager;
|
||||
|
||||
public ShardingTest(ShardingDefaultDbContext virtualDbContext,IShardingRouteManager shardingRouteManager, IConnectionStringManager<ShardingDefaultDbContext> connectionStringManager,IConfiguration configuration,
|
||||
public ShardingTest(ShardingDefaultDbContext virtualDbContext,IShardingRouteManager shardingRouteManager, IConfiguration configuration,
|
||||
IEntityMetadataManager<ShardingDefaultDbContext> entityMetadataManager,
|
||||
IShardingComparer<ShardingDefaultDbContext> shardingComparer,IVirtualDataSource<ShardingDefaultDbContext> virtualDataSource,
|
||||
IVirtualTableManager<ShardingDefaultDbContext> virtualTableManager,
|
||||
IShardingTableCreator<ShardingDefaultDbContext> shardingTableCreator)
|
||||
IShardingTableCreator<ShardingDefaultDbContext> shardingTableCreator, IShardingReadWriteManager shardingReadWriteManager)
|
||||
{
|
||||
_virtualDbContext = virtualDbContext;
|
||||
_shardingRouteManager = shardingRouteManager;
|
||||
_connectionStringManager = connectionStringManager;
|
||||
_connectionStringManager = new ActualConnectionStringManager<ShardingDefaultDbContext>();
|
||||
_configuration = configuration;
|
||||
this._entityMetadataManager = entityMetadataManager;
|
||||
_shardingComparer = shardingComparer;
|
||||
_virtualDataSource = virtualDataSource;
|
||||
_virtualTableManager = virtualTableManager;
|
||||
_shardingTableCreator = shardingTableCreator;
|
||||
_shardingReadWriteManager = shardingReadWriteManager;
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
@ -124,8 +128,24 @@ namespace ShardingCore.Test6x
|
|||
}
|
||||
|
||||
await _virtualDbContext.AddRangeAsync(logDays);
|
||||
_virtualDbContext.AddRange(logDays);
|
||||
var bulkShardingExpression = _virtualDbContext.BulkShardingExpression<ShardingDefaultDbContext,Order>(o=>new[]{"A","B"}.Contains(o.Area));
|
||||
Assert.Equal(2, bulkShardingExpression.Count);
|
||||
Assert.True(bulkShardingExpression.ContainsKey("A"));
|
||||
Assert.True(bulkShardingExpression.ContainsKey("B"));
|
||||
|
||||
var bulkShardingTableExpression = _virtualDbContext.BulkShardingTableExpression<ShardingDefaultDbContext,SysUserMod>(o=>o.Id==Guid.NewGuid().ToString());
|
||||
Assert.Equal(1, bulkShardingTableExpression.Count());
|
||||
|
||||
var isShardingDbContext = _virtualDbContext.IsShardingDbContext();
|
||||
Assert.True(isShardingDbContext);
|
||||
var isShardingTableDbContext = _virtualDbContext.IsShardingTableDbContext();
|
||||
Assert.True(isShardingTableDbContext);
|
||||
var shardingDbContext = _virtualDbContext.GetType().IsShardingDbContext();
|
||||
Assert.True(shardingDbContext);
|
||||
var shardingTableDbContext = _virtualDbContext.GetType().IsShardingTableDbContext();
|
||||
Assert.True(shardingTableDbContext);
|
||||
var virtualTable = _virtualTableManager.GetVirtualTable<SysUserMod>();
|
||||
Assert.NotNull(virtualTable);
|
||||
}
|
||||
|
||||
public class SequenceClass
|
||||
|
@ -169,8 +189,10 @@ namespace ShardingCore.Test6x
|
|||
[Fact]
|
||||
public void TestConnectionStringManager()
|
||||
{
|
||||
var connectionString = _connectionStringManager.GetConnectionString(_virtualDataSource.DefaultDataSourceName);
|
||||
Assert.Equal(connectionString, "Data Source=localhost;Initial Catalog=ShardingCoreDBA;Integrated Security=True;");
|
||||
_virtualDbContext.ReadWriteSeparationReadOnly();
|
||||
var connectionString1 = _connectionStringManager.GetConnectionString(_virtualDataSource.DefaultDataSourceName, true);
|
||||
Assert.Equal(connectionString1, "Data Source=localhost;Initial Catalog=ShardingCoreDBA;Integrated Security=True;");
|
||||
_virtualDbContext.ReadWriteSeparationWriteOnly();
|
||||
}
|
||||
//[Fact]
|
||||
//public async Task Route_TEST()
|
||||
|
@ -838,6 +860,59 @@ namespace ShardingCore.Test6x
|
|||
var z1 = await _virtualDbContext.Set<Order>().SingleAsync(o => o.Money == 13);
|
||||
Assert.Equal(z, z1);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task OrderReadWrite()
|
||||
{
|
||||
//切换到只读数据库,只读数据库又只配置了A数据源读取B数据源
|
||||
_virtualDbContext.ReadWriteSeparationReadOnly();
|
||||
var list = await _virtualDbContext.Set<Order>().Where(o=>o.Money==1).ToListAsync();
|
||||
Assert.Equal(2, list.Count);
|
||||
|
||||
_virtualDbContext.ReadWriteSeparationWriteOnly();
|
||||
using (_shardingRouteManager.CreateScope())
|
||||
{
|
||||
_shardingRouteManager.Current.TryCreateOrAddMustDataSource<Order>("A");
|
||||
var areaB = await _virtualDbContext.Set<Order>().Where(o => o.Area == "B").FirstOrDefaultAsync();
|
||||
Assert.Null(areaB);
|
||||
}
|
||||
_virtualDbContext.ReadWriteSeparationReadOnly();
|
||||
using (_shardingRouteManager.CreateScope())
|
||||
{
|
||||
_shardingRouteManager.Current.TryCreateOrAddMustDataSource<Order>("A");
|
||||
var areaB = await _virtualDbContext.Set<Order>().Where(o => o.Area == "B").FirstOrDefaultAsync();
|
||||
Assert.NotNull(areaB);
|
||||
}
|
||||
|
||||
_virtualDbContext.ReadWriteSeparationWriteOnly();
|
||||
using (_shardingReadWriteManager.CreateScope<ShardingDefaultDbContext>())
|
||||
{
|
||||
_shardingReadWriteManager.GetCurrent<ShardingDefaultDbContext>().SetReadWriteSeparation(100, true);
|
||||
using (_shardingRouteManager.CreateScope())
|
||||
{
|
||||
_shardingRouteManager.Current.TryCreateOrAddMustDataSource<Order>("A");
|
||||
var areaB = await _virtualDbContext.Set<Order>().Where(o => o.Area == "B").FirstOrDefaultAsync();
|
||||
Assert.NotNull(areaB);
|
||||
}
|
||||
}
|
||||
using (_shardingReadWriteManager.CreateScope<ShardingDefaultDbContext>())
|
||||
{
|
||||
_shardingReadWriteManager.GetCurrent<ShardingDefaultDbContext>().SetReadWriteSeparation(100, true);
|
||||
_virtualDbContext.ReadWriteSeparationWriteOnly();
|
||||
using (_shardingRouteManager.CreateScope())
|
||||
{
|
||||
_shardingRouteManager.Current.TryCreateOrAddMustDataSource<Order>("A");
|
||||
var areaB = await _virtualDbContext.Set<Order>().Where(o => o.Area == "B").FirstOrDefaultAsync();
|
||||
Assert.Null(areaB);
|
||||
}
|
||||
}
|
||||
using (_shardingRouteManager.CreateScope())
|
||||
{
|
||||
_shardingRouteManager.Current.TryCreateOrAddMustDataSource<Order>("A");
|
||||
var areaB = await _virtualDbContext.Set<Order>().Where(o => o.Area == "B").FirstOrDefaultAsync();
|
||||
Assert.Null(areaB);
|
||||
}
|
||||
}
|
||||
// [Fact]
|
||||
// public async Task Group_API_Test()
|
||||
// {
|
||||
|
|
|
@ -15,6 +15,7 @@ using ShardingCore.Exceptions;
|
|||
using ShardingCore.Extensions;
|
||||
using ShardingCore.Extensions.ShardingPageExtensions;
|
||||
using ShardingCore.Sharding.Abstractions;
|
||||
using ShardingCore.Sharding.ReadWriteConfigurations.Abstractions;
|
||||
using ShardingCore.Sharding.ShardingComparision.Abstractions;
|
||||
using ShardingCore.TableCreator;
|
||||
using ShardingCore.Test6x.Domain.Entities;
|
||||
|
@ -28,29 +29,29 @@ namespace ShardingCore.Test6x
|
|||
{
|
||||
private readonly ShardingDefaultDbContext _virtualDbContext;
|
||||
private readonly IShardingRouteManager _shardingRouteManager;
|
||||
private readonly IConnectionStringManager<ShardingDefaultDbContext> _connectionStringManager;
|
||||
private readonly IConfiguration _configuration;
|
||||
private readonly IEntityMetadataManager<ShardingDefaultDbContext> _entityMetadataManager;
|
||||
private readonly IShardingComparer<ShardingDefaultDbContext> _shardingComparer;
|
||||
private readonly IVirtualDataSource<ShardingDefaultDbContext> _virtualDataSource;
|
||||
private readonly IVirtualTableManager<ShardingDefaultDbContext> _virtualTableManager;
|
||||
private readonly IShardingTableCreator<ShardingDefaultDbContext> _shardingTableCreator;
|
||||
private readonly IShardingReadWriteManager _shardingReadWriteManager;
|
||||
|
||||
public ShardingTestSync(ShardingDefaultDbContext virtualDbContext, IShardingRouteManager shardingRouteManager, IConnectionStringManager<ShardingDefaultDbContext> connectionStringManager, IConfiguration configuration,
|
||||
public ShardingTestSync(ShardingDefaultDbContext virtualDbContext, IShardingRouteManager shardingRouteManager, IConfiguration configuration,
|
||||
IEntityMetadataManager<ShardingDefaultDbContext> entityMetadataManager,
|
||||
IShardingComparer<ShardingDefaultDbContext> shardingComparer, IVirtualDataSource<ShardingDefaultDbContext> virtualDataSource,
|
||||
IVirtualTableManager<ShardingDefaultDbContext> virtualTableManager,
|
||||
IShardingTableCreator<ShardingDefaultDbContext> shardingTableCreator)
|
||||
IShardingTableCreator<ShardingDefaultDbContext> shardingTableCreator, IShardingReadWriteManager shardingReadWriteManager)
|
||||
{
|
||||
_virtualDbContext = virtualDbContext;
|
||||
_shardingRouteManager = shardingRouteManager;
|
||||
_connectionStringManager = connectionStringManager;
|
||||
_configuration = configuration;
|
||||
this._entityMetadataManager = entityMetadataManager;
|
||||
_shardingComparer = shardingComparer;
|
||||
_virtualDataSource = virtualDataSource;
|
||||
_virtualTableManager = virtualTableManager;
|
||||
_shardingTableCreator = shardingTableCreator;
|
||||
_shardingReadWriteManager = shardingReadWriteManager;
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
@ -120,6 +121,24 @@ namespace ShardingCore.Test6x
|
|||
}
|
||||
|
||||
_virtualDbContext.AddRange(logDays);
|
||||
var bulkShardingExpression = _virtualDbContext.BulkShardingExpression<ShardingDefaultDbContext, Order>(o => new[] { "A", "B" }.Contains(o.Area));
|
||||
Assert.Equal(2, bulkShardingExpression.Count);
|
||||
Assert.True(bulkShardingExpression.ContainsKey("A"));
|
||||
Assert.True(bulkShardingExpression.ContainsKey("B"));
|
||||
|
||||
var bulkShardingTableExpression = _virtualDbContext.BulkShardingTableExpression<ShardingDefaultDbContext, SysUserMod>(o => o.Id == Guid.NewGuid().ToString());
|
||||
Assert.Equal(1, bulkShardingTableExpression.Count());
|
||||
|
||||
var isShardingDbContext = _virtualDbContext.IsShardingDbContext();
|
||||
Assert.True(isShardingDbContext);
|
||||
var isShardingTableDbContext = _virtualDbContext.IsShardingTableDbContext();
|
||||
Assert.True(isShardingTableDbContext);
|
||||
var shardingDbContext = _virtualDbContext.GetType().IsShardingDbContext();
|
||||
Assert.True(shardingDbContext);
|
||||
var shardingTableDbContext = _virtualDbContext.GetType().IsShardingTableDbContext();
|
||||
Assert.True(shardingTableDbContext);
|
||||
var virtualTable = _virtualTableManager.GetVirtualTable<SysUserMod>();
|
||||
Assert.NotNull(virtualTable);
|
||||
|
||||
}
|
||||
|
||||
|
@ -161,12 +180,6 @@ namespace ShardingCore.Test6x
|
|||
var compare1 = _shardingComparer.Compare(x, y, true);
|
||||
Assert.True(compare1 < 0);
|
||||
}
|
||||
[Fact]
|
||||
public void TestConnectionStringManager()
|
||||
{
|
||||
var connectionString = _connectionStringManager.GetConnectionString(_virtualDataSource.DefaultDataSourceName);
|
||||
Assert.Equal(connectionString, "Data Source=localhost;Initial Catalog=ShardingCoreDBA;Integrated Security=True;");
|
||||
}
|
||||
//[Fact]
|
||||
//public void Route_TEST()
|
||||
//{
|
||||
|
@ -831,6 +844,57 @@ namespace ShardingCore.Test6x
|
|||
var z1 = _virtualDbContext.Set<Order>().Single(o => o.Money == 13);
|
||||
Assert.Equal(z, z1);
|
||||
}
|
||||
[Fact]
|
||||
public void OrderReadWrite()
|
||||
{
|
||||
//切换到只读数据库,只读数据库又只配置了A数据源读取B数据源
|
||||
_virtualDbContext.ReadWriteSeparationReadOnly();
|
||||
var list = _virtualDbContext.Set<Order>().Where(o => o.Money == 1).ToList();
|
||||
Assert.Equal(2, list.Count);
|
||||
|
||||
_virtualDbContext.ReadWriteSeparationWriteOnly();
|
||||
using (_shardingRouteManager.CreateScope())
|
||||
{
|
||||
_shardingRouteManager.Current.TryCreateOrAddMustDataSource<Order>("A");
|
||||
var areaB = _virtualDbContext.Set<Order>().Where(o => o.Area == "B").FirstOrDefault();
|
||||
Assert.Null(areaB);
|
||||
}
|
||||
_virtualDbContext.ReadWriteSeparationReadOnly();
|
||||
using (_shardingRouteManager.CreateScope())
|
||||
{
|
||||
_shardingRouteManager.Current.TryCreateOrAddMustDataSource<Order>("A");
|
||||
var areaB = _virtualDbContext.Set<Order>().Where(o => o.Area == "B").FirstOrDefault();
|
||||
Assert.NotNull(areaB);
|
||||
}
|
||||
_virtualDbContext.ReadWriteSeparationWriteOnly();
|
||||
using (_shardingReadWriteManager.CreateScope<ShardingDefaultDbContext>())
|
||||
{
|
||||
_shardingReadWriteManager.GetCurrent<ShardingDefaultDbContext>().SetReadWriteSeparation(100, true);
|
||||
using (_shardingRouteManager.CreateScope())
|
||||
{
|
||||
_shardingRouteManager.Current.TryCreateOrAddMustDataSource<Order>("A");
|
||||
var areaB = _virtualDbContext.Set<Order>().Where(o => o.Area == "B").FirstOrDefault();
|
||||
Assert.NotNull(areaB);
|
||||
}
|
||||
}
|
||||
using (_shardingReadWriteManager.CreateScope<ShardingDefaultDbContext>())
|
||||
{
|
||||
_shardingReadWriteManager.GetCurrent<ShardingDefaultDbContext>().SetReadWriteSeparation(100, true);
|
||||
_virtualDbContext.ReadWriteSeparationWriteOnly();
|
||||
using (_shardingRouteManager.CreateScope())
|
||||
{
|
||||
_shardingRouteManager.Current.TryCreateOrAddMustDataSource<Order>("A");
|
||||
var areaB = _virtualDbContext.Set<Order>().Where(o => o.Area == "B").FirstOrDefault();
|
||||
Assert.Null(areaB);
|
||||
}
|
||||
}
|
||||
using (_shardingRouteManager.CreateScope())
|
||||
{
|
||||
_shardingRouteManager.Current.TryCreateOrAddMustDataSource<Order>("A");
|
||||
var areaB = _virtualDbContext.Set<Order>().Where(o => o.Area == "B").FirstOrDefault();
|
||||
Assert.Null(areaB);
|
||||
}
|
||||
}
|
||||
// [Fact]
|
||||
// public void Group_API_Test()
|
||||
// {
|
||||
|
|
|
@ -16,12 +16,10 @@ namespace ShardingCore.Test6x.Shardings
|
|||
return new DateTime(2021, 1, 1);
|
||||
}
|
||||
|
||||
|
||||
public override IPaginationConfiguration<Order> CreatePaginationConfiguration()
|
||||
{
|
||||
return new OrderCreateTimePaginationConfiguration();
|
||||
}
|
||||
|
||||
public override bool AutoCreateTableByTime()
|
||||
{
|
||||
return true;
|
||||
|
|
|
@ -8,6 +8,7 @@ using Microsoft.Extensions.DependencyInjection;
|
|||
using Microsoft.Extensions.Hosting;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using ShardingCore.Bootstrapers;
|
||||
using ShardingCore.Sharding.ReadWriteConfigurations;
|
||||
using ShardingCore.Sharding.ShardingComparision;
|
||||
using ShardingCore.Test6x.Domain.Entities;
|
||||
using ShardingCore.Test6x.Shardings;
|
||||
|
@ -62,7 +63,18 @@ namespace ShardingCore.Test6x
|
|||
op.AddShardingTableRoute<SysUserSalaryVirtualTableRoute>();
|
||||
op.AddShardingTableRoute<OrderCreateTimeVirtualTableRoute>();
|
||||
op.AddShardingTableRoute<LogDayVirtualTableRoute>();
|
||||
}).End();
|
||||
}).AddReadWriteSeparation(sp =>
|
||||
{
|
||||
return new Dictionary<string, ISet<string>>()
|
||||
{
|
||||
{
|
||||
"A", new HashSet<string>()
|
||||
{
|
||||
"Data Source=localhost;Initial Catalog=ShardingCoreDBB;Integrated Security=True;"
|
||||
}
|
||||
}
|
||||
};
|
||||
},ReadStrategyEnum.Loop,readConnStringGetStrategy:ReadConnStringGetStrategyEnum.LatestEveryTime).End();
|
||||
// services.AddShardingDbContext<ShardingDefaultDbContext, DefaultDbContext>(o => o.UseMySql(hostBuilderContext.Configuration.GetSection("MySql")["ConnectionString"],new MySqlServerVersion("5.7.15"))
|
||||
// ,op =>
|
||||
// {
|
||||
|
|
Loading…
Reference in New Issue