test mysql unit test and support single node read single node write
This commit is contained in:
parent
3d0f1b12a0
commit
6af0fd8896
|
@ -343,4 +343,4 @@ healthchecksdb
|
|||
/src/Bd.ShopRent.Api/Properties/launchSettings.json
|
||||
/src/Bd.ShopRent.DTO/__autoDTOConfig.json
|
||||
/src/Bd.ShopRent.DTO/Bd.ShopRent.Dto.csproj
|
||||
/test/ShardingCore.Test50/Configs/*
|
||||
MacDbConfig.json
|
||||
|
|
28
README.md
28
README.md
|
@ -16,7 +16,7 @@ Release | EF Core | .NET Standard | .NET (Core)
|
|||
### 数据库支持
|
||||
数据库 | 是否支持 | 支持情况
|
||||
--- | --- | ---
|
||||
SqlServer | 是 | 80%近乎完美
|
||||
SqlServer | 是 | 90%近乎完美
|
||||
MySql |支持 | 未测试
|
||||
PostgreSql | 支持 | 未测试
|
||||
SQLite | 支持 | 未测试
|
||||
|
@ -40,6 +40,7 @@ Oracle | 支持 | 未测试
|
|||
- [自动建表](#自动建表)
|
||||
- [事务](#事务)
|
||||
- [批量操作](#批量操作)
|
||||
- [读写分离](#读写分离)
|
||||
- [注意事项](#注意事项)
|
||||
- [计划(Future)](#计划)
|
||||
- [最后](#最后)
|
||||
|
@ -94,7 +95,11 @@ Oracle | 支持 | 未测试
|
|||
|
||||
## 安装
|
||||
```xml
|
||||
<PackageReference Include="ShardingCore" Version="5.2.0.03" />
|
||||
<PackageReference Include="ShardingCore" Version="5.2.0.07" />
|
||||
or
|
||||
<PackageReference Include="ShardingCore" Version="3.2.0.07" />
|
||||
or
|
||||
<PackageReference Include="ShardingCore" Version="2.2.0.07" />
|
||||
```
|
||||
|
||||
## 配置
|
||||
|
@ -154,7 +159,7 @@ Oracle | 支持 | 未测试
|
|||
modelBuilder.ApplyConfiguration(new SysTestMap());
|
||||
}
|
||||
|
||||
public string ModelChangeKey { get; set; }
|
||||
public IRouteTail RouteTail { get; set; }
|
||||
}
|
||||
```
|
||||
|
||||
|
@ -196,7 +201,6 @@ Oracle | 支持 | 未测试
|
|||
{
|
||||
op.EnsureCreatedWithOutShardingTable = true;
|
||||
op.CreateShardingTableOnStart = true;
|
||||
//不支持mars额外加一条字符串的
|
||||
op.UseShardingOptionsBuilder(
|
||||
(connection, builder) => builder.UseSqlServer(connection).UseLoggerFactory(efLogger),
|
||||
builder => builder.UseSqlServer("Data Source=localhost;Initial Catalog=ShardingCoreDBxx2;Integrated Security=True;").UseLoggerFactory(efLogger));
|
||||
|
@ -308,6 +312,22 @@ AbstractSimpleShardingYearKeyLongVirtualTableRoute |按时间戳 |yyyy | `>,>=,<
|
|||
tran.commit()
|
||||
|
||||
```
|
||||
## 读写分离
|
||||
该框架目前已经支持单node的读写分离,后续框架将支持多node的读
|
||||
|
||||
```c#
|
||||
|
||||
services.AddShardingDbContext<ShardingDefaultDbContext, DefaultDbContext>(o => o.UseSqlServer(hostBuilderContext.Configuration.GetSection("SqlServer")["ConnectionString"])
|
||||
,op =>
|
||||
{
|
||||
op.EnsureCreatedWithOutShardingTable = true;
|
||||
op.CreateShardingTableOnStart = true;
|
||||
op.UseShardingOptionsBuilder((connection, builder) => builder.UseSqlServer("write db connection string").UseLoggerFactory(efLogger),
|
||||
(conStr,builder)=> builder.UseSqlServer("read db connection string").UseLoggerFactory(efLogger));
|
||||
op.AddShardingTableRoute<SysUserModVirtualTableRoute>();
|
||||
op.AddShardingTableRoute<SysUserSalaryVirtualTableRoute>();
|
||||
});
|
||||
```
|
||||
|
||||
# 注意事项
|
||||
该库的追踪是基于adonet的MARS(MultipleActiveResultSets=True;)所以基本不支持该特性的无法支持完美追踪
|
||||
|
|
|
@ -31,7 +31,7 @@ namespace Sample.SqlServer
|
|||
op.EnsureCreatedWithOutShardingTable = true;
|
||||
op.CreateShardingTableOnStart = true;
|
||||
op.UseShardingOptionsBuilder((connection, builder) => builder.UseSqlServer(connection).UseLoggerFactory(efLogger),
|
||||
builder => builder.UseSqlServer("Data Source=localhost;Initial Catalog=ShardingCoreDBxx2;Integrated Security=True;").UseLoggerFactory(efLogger));
|
||||
(conStr,builder) => builder.UseSqlServer(conStr).UseLoggerFactory(efLogger));
|
||||
op.AddShardingTableRoute<SysUserModVirtualTableRoute>();
|
||||
});
|
||||
////不支持MARS不支持追踪的
|
||||
|
|
|
@ -65,7 +65,8 @@ namespace Samples.AbpSharding
|
|||
private DbContextOptions<T> CreateMonopolyDbContextOptions()
|
||||
{
|
||||
var dbContextOptionBuilder = CreateDbContextOptionBuilder();
|
||||
_shardingDbContextOptionsBuilderConfig.UseDbContextOptionsBuilder(dbContextOptionBuilder);
|
||||
var connectionString = Database.GetConnectionString();
|
||||
_shardingDbContextOptionsBuilderConfig.UseDbContextOptionsBuilder(connectionString,dbContextOptionBuilder);
|
||||
return dbContextOptionBuilder.Options;
|
||||
}
|
||||
|
||||
|
|
|
@ -17,6 +17,6 @@ namespace ShardingCore
|
|||
{
|
||||
Type ShardingDbContextType { get; }
|
||||
DbContextOptionsBuilder UseDbContextOptionsBuilder(DbConnection dbConnection, DbContextOptionsBuilder dbContextOptionsBuilder);
|
||||
DbContextOptionsBuilder UseDbContextOptionsBuilder(DbContextOptionsBuilder dbContextOptionsBuilder);
|
||||
DbContextOptionsBuilder UseDbContextOptionsBuilder(string connectionString,DbContextOptionsBuilder dbContextOptionsBuilder);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -77,7 +77,8 @@ namespace ShardingCore.Sharding
|
|||
private DbContextOptions<T> CreateMonopolyDbContextOptions()
|
||||
{
|
||||
var dbContextOptionBuilder = CreateDbContextOptionBuilder();
|
||||
_shardingDbContextOptionsBuilderConfig.UseDbContextOptionsBuilder(dbContextOptionBuilder);
|
||||
var connectionString = Database.GetDbConnection().ConnectionString;
|
||||
_shardingDbContextOptionsBuilderConfig.UseDbContextOptionsBuilder(connectionString,dbContextOptionBuilder);
|
||||
return dbContextOptionBuilder.Options;
|
||||
}
|
||||
|
||||
|
|
|
@ -16,13 +16,13 @@ namespace ShardingCore.Sharding
|
|||
*/
|
||||
public class ShardingDbContextOptionsBuilderConfig<TShardingDbContext> : IShardingDbContextOptionsBuilderConfig where TShardingDbContext : DbContext, IShardingDbContext
|
||||
{
|
||||
public ShardingDbContextOptionsBuilderConfig(Action<DbConnection, DbContextOptionsBuilder> sameConnectionDbContextOptionsCreator, Action<DbContextOptionsBuilder> defaultQueryDbContextOptionsCreator)
|
||||
public ShardingDbContextOptionsBuilderConfig(Action<DbConnection, DbContextOptionsBuilder> sameConnectionDbContextOptionsCreator, Action<string,DbContextOptionsBuilder> defaultQueryDbContextOptionsCreator)
|
||||
{
|
||||
SameConnectionDbContextOptionsCreator = sameConnectionDbContextOptionsCreator;
|
||||
DefaultQueryDbContextOptionsCreator = defaultQueryDbContextOptionsCreator;
|
||||
}
|
||||
public Action<DbConnection, DbContextOptionsBuilder> SameConnectionDbContextOptionsCreator { get; }
|
||||
public Action<DbContextOptionsBuilder> DefaultQueryDbContextOptionsCreator { get; }
|
||||
public Action<string,DbContextOptionsBuilder> DefaultQueryDbContextOptionsCreator { get; }
|
||||
public Type ShardingDbContextType => typeof(TShardingDbContext);
|
||||
|
||||
public DbContextOptionsBuilder UseDbContextOptionsBuilder(DbConnection dbConnection, DbContextOptionsBuilder dbContextOptionsBuilder)
|
||||
|
@ -32,9 +32,9 @@ namespace ShardingCore.Sharding
|
|||
return dbContextOptionsBuilder;
|
||||
}
|
||||
|
||||
public DbContextOptionsBuilder UseDbContextOptionsBuilder(DbContextOptionsBuilder dbContextOptionsBuilder)
|
||||
public DbContextOptionsBuilder UseDbContextOptionsBuilder(string connectionString,DbContextOptionsBuilder dbContextOptionsBuilder)
|
||||
{
|
||||
DefaultQueryDbContextOptionsCreator(dbContextOptionsBuilder);
|
||||
DefaultQueryDbContextOptionsCreator(connectionString,dbContextOptionsBuilder);
|
||||
dbContextOptionsBuilder.UseInnerDbContextSharding<TShardingDbContext>();
|
||||
return dbContextOptionsBuilder;
|
||||
}
|
||||
|
|
|
@ -26,14 +26,14 @@ namespace ShardingCore
|
|||
private readonly Dictionary<Type, Type> _virtualRoutes = new Dictionary<Type, Type>();
|
||||
|
||||
public Action<DbConnection, DbContextOptionsBuilder> SameConnectionConfigure { get; set; }
|
||||
public Action<DbContextOptionsBuilder> DefaultQueryConfigure { get; set; }
|
||||
public Action<string,DbContextOptionsBuilder> DefaultQueryConfigure { get; set; }
|
||||
/// <summary>
|
||||
/// 配置数据库分表查询和保存时的DbContext创建方式
|
||||
/// </summary>
|
||||
/// <param name="sameConnectionConfigure">DbConnection下如何配置因为不同的DbContext支持事务需要使用同一个DbConnection</param>
|
||||
/// <param name="defaultBuilderConfigure">默认查询DbContext创建的配置</param>
|
||||
|
||||
public void UseShardingOptionsBuilder(Action<DbConnection, DbContextOptionsBuilder> sameConnectionConfigure, Action<DbContextOptionsBuilder> defaultQueryConfigure = null)
|
||||
public void UseShardingOptionsBuilder(Action<DbConnection, DbContextOptionsBuilder> sameConnectionConfigure, Action<string,DbContextOptionsBuilder> defaultQueryConfigure = null)
|
||||
{
|
||||
SameConnectionConfigure = sameConnectionConfigure ?? throw new ArgumentNullException(nameof(sameConnectionConfigure));
|
||||
DefaultQueryConfigure = defaultQueryConfigure ?? throw new ArgumentNullException(nameof(defaultQueryConfigure));
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
{
|
||||
"SqlServer": {
|
||||
"ConnectionString": "Data Source=localhost;Initial Catalog=ShardingCoreDB;Integrated Security=True;"
|
||||
},
|
||||
"MySql": {
|
||||
"ConnectionString": "server=127.0.0.1;port=3306;user=root;password=root;database=ShardingCoreDB;sslMode=None;"
|
||||
}
|
||||
|
||||
}
|
|
@ -9,6 +9,7 @@
|
|||
<PackageReference Include="Microsoft.AspNetCore.TestHost" Version="5.0.2" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="5.0.9" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.8.3" />
|
||||
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="5.0.1" />
|
||||
<PackageReference Include="xunit" Version="2.4.1" />
|
||||
<PackageReference Include="Xunit.DependencyInjection" Version="7.1.0" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
|
||||
|
|
|
@ -51,13 +51,23 @@ namespace ShardingCore.Test50
|
|||
services.AddShardingDbContext<ShardingDefaultDbContext, DefaultDbContext>(o => o.UseSqlServer(hostBuilderContext.Configuration.GetSection("SqlServer")["ConnectionString"])
|
||||
,op =>
|
||||
{
|
||||
op.EnsureCreatedWithOutShardingTable = false;
|
||||
op.CreateShardingTableOnStart = false;
|
||||
op.EnsureCreatedWithOutShardingTable = true;
|
||||
op.CreateShardingTableOnStart = true;
|
||||
op.UseShardingOptionsBuilder((connection, builder) => builder.UseSqlServer(connection).UseLoggerFactory(efLogger),
|
||||
builder=> builder.UseSqlServer(hostBuilderContext.Configuration.GetSection("SqlServer")["ConnectionString"]).UseLoggerFactory(efLogger));
|
||||
(conStr,builder)=> builder.UseSqlServer(conStr).UseLoggerFactory(efLogger));
|
||||
op.AddShardingTableRoute<SysUserModVirtualTableRoute>();
|
||||
op.AddShardingTableRoute<SysUserSalaryVirtualTableRoute>();
|
||||
});
|
||||
// services.AddShardingDbContext<ShardingDefaultDbContext, DefaultDbContext>(o => o.UseMySql(hostBuilderContext.Configuration.GetSection("MySql")["ConnectionString"],new MySqlServerVersion("5.7.15"))
|
||||
// ,op =>
|
||||
// {
|
||||
// op.EnsureCreatedWithOutShardingTable = true;
|
||||
// op.CreateShardingTableOnStart = true;
|
||||
// op.UseShardingOptionsBuilder((connection, builder) => builder.UseMySql(connection,new MySqlServerVersion("5.7.15")).UseLoggerFactory(efLogger),
|
||||
// (conStr,builder)=> builder.UseMySql(conStr,new MySqlServerVersion("5.7.15")).UseLoggerFactory(efLogger));
|
||||
// op.AddShardingTableRoute<SysUserModVirtualTableRoute>();
|
||||
// op.AddShardingTableRoute<SysUserSalaryVirtualTableRoute>();
|
||||
// });
|
||||
}
|
||||
|
||||
// 可以添加要用到的方法参数,会自动从注册的服务中获取服务实例,类似于 asp.net core 里 Configure 方法
|
||||
|
|
|
@ -23,7 +23,6 @@
|
|||
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
|
||||
</Content>
|
||||
<None Remove="Configs\MacDbConfig.json" />
|
||||
<Content Include="Configs\MacDbConfig.json" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
@ -44,10 +44,10 @@ namespace ShardingCore.Test50_2x
|
|||
services.AddShardingDbContext<ShardingDefaultDbContext, DefaultDbContext>(o => o.UseSqlServer(hostBuilderContext.Configuration.GetSection("SqlServer")["ConnectionString"])
|
||||
,op =>
|
||||
{
|
||||
op.EnsureCreatedWithOutShardingTable = false;
|
||||
op.CreateShardingTableOnStart = false;
|
||||
op.EnsureCreatedWithOutShardingTable = true;
|
||||
op.CreateShardingTableOnStart = true;
|
||||
op.UseShardingOptionsBuilder((connection, builder) => builder.UseSqlServer(connection).UseLoggerFactory(efLogger),
|
||||
builder=> builder.UseSqlServer(hostBuilderContext.Configuration.GetSection("SqlServer")["ConnectionString"]).UseLoggerFactory(efLogger));
|
||||
(conStr,builder)=> builder.UseSqlServer(conStr).UseLoggerFactory(efLogger));
|
||||
op.AddShardingTableRoute<SysUserModVirtualTableRoute>();
|
||||
op.AddShardingTableRoute<SysUserSalaryVirtualTableRoute>();
|
||||
});
|
||||
|
|
|
@ -22,7 +22,6 @@
|
|||
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
|
||||
</Content>
|
||||
<None Remove="Configs\MacDbConfig.json" />
|
||||
<Content Include="Configs\MacDbConfig.json" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
@ -44,10 +44,10 @@ namespace ShardingCore.Test50_3x
|
|||
services.AddShardingDbContext<ShardingDefaultDbContext, DefaultDbContext>(o => o.UseSqlServer(hostBuilderContext.Configuration.GetSection("SqlServer")["ConnectionString"])
|
||||
,op =>
|
||||
{
|
||||
op.EnsureCreatedWithOutShardingTable = false;
|
||||
op.CreateShardingTableOnStart = false;
|
||||
op.EnsureCreatedWithOutShardingTable = true;
|
||||
op.CreateShardingTableOnStart = true;
|
||||
op.UseShardingOptionsBuilder((connection, builder) => builder.UseSqlServer(connection).UseLoggerFactory(efLogger),
|
||||
builder=> builder.UseSqlServer(hostBuilderContext.Configuration.GetSection("SqlServer")["ConnectionString"]).UseLoggerFactory(efLogger));
|
||||
(conStr,builder)=> builder.UseSqlServer(conStr).UseLoggerFactory(efLogger));
|
||||
op.AddShardingTableRoute<SysUserModVirtualTableRoute>();
|
||||
op.AddShardingTableRoute<SysUserSalaryVirtualTableRoute>();
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue