添加动态数据源选择性创建库和表,发布x.5.0.13
This commit is contained in:
parent
e68234c8cc
commit
9ac4e5a942
|
@ -1,9 +1,9 @@
|
|||
:start
|
||||
::定义版本
|
||||
set EFCORE2=2.5.0.12
|
||||
set EFCORE3=3.5.0.12
|
||||
set EFCORE5=5.5.0.12
|
||||
set EFCORE6=6.5.0.12
|
||||
set EFCORE2=2.5.0.13
|
||||
set EFCORE3=3.5.0.13
|
||||
set EFCORE5=5.5.0.13
|
||||
set EFCORE6=6.5.0.13
|
||||
|
||||
::删除所有bin与obj下的文件
|
||||
@echo off
|
||||
|
|
|
@ -49,7 +49,7 @@ namespace ShardingCore.DynamicDataSources
|
|||
}
|
||||
|
||||
public void InitConfigure(IVirtualDataSource<TShardingDbContext> virtualDataSource, string dataSourceName,
|
||||
string connectionString, bool isOnStart)
|
||||
string connectionString, bool isOnStart, bool? needCreateDatabase=null, bool? needCreateTable = null)
|
||||
{
|
||||
using (var serviceScope = ShardingContainer.ServiceProvider.CreateScope())
|
||||
{
|
||||
|
@ -57,9 +57,11 @@ namespace ShardingCore.DynamicDataSources
|
|||
{
|
||||
using (var context = serviceScope.ServiceProvider.GetService<TShardingDbContext>())
|
||||
{
|
||||
if (_entityConfigOptions.EnsureCreatedWithOutShardingTable || !isOnStart)
|
||||
var createDatabase = !needCreateDatabase.HasValue || needCreateDatabase.Value;
|
||||
|
||||
if ((_entityConfigOptions.EnsureCreatedWithOutShardingTable || !isOnStart)&&createDatabase)
|
||||
EnsureCreated(virtualDataSource, context, dataSourceName);
|
||||
else if (_entityConfigOptions.CreateDataBaseOnlyOnStart.GetValueOrDefault())
|
||||
else if (_entityConfigOptions.CreateDataBaseOnlyOnStart.GetValueOrDefault()&& createDatabase)
|
||||
{
|
||||
EnsureCreateDataBaseOnly(context, dataSourceName);
|
||||
}
|
||||
|
@ -77,7 +79,7 @@ namespace ShardingCore.DynamicDataSources
|
|||
{
|
||||
var virtualTable = _virtualTableManager.GetVirtualTable(entityType);
|
||||
//创建表
|
||||
CreateDataTable(dataSourceName, virtualTable, existTables, isOnStart);
|
||||
CreateDataTable(dataSourceName, virtualTable, existTables, isOnStart, needCreateTable);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -91,7 +93,7 @@ namespace ShardingCore.DynamicDataSources
|
|||
{
|
||||
var virtualTable = _virtualTableManager.GetVirtualTable(entityType);
|
||||
//创建表
|
||||
CreateDataTable(dataSourceName, virtualTable, existTables, isOnStart);
|
||||
CreateDataTable(dataSourceName, virtualTable, existTables, isOnStart,needCreateTable);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -103,13 +105,13 @@ namespace ShardingCore.DynamicDataSources
|
|||
}
|
||||
|
||||
private void CreateDataTable(string dataSourceName, IVirtualTable virtualTable, ISet<string> existTables,
|
||||
bool isOnStart)
|
||||
bool isOnStart,bool? needCreateTable)
|
||||
{
|
||||
var entityMetadata = virtualTable.EntityMetadata;
|
||||
foreach (var tail in virtualTable.GetVirtualRoute().GetAllTails())
|
||||
{
|
||||
var defaultPhysicTable = new DefaultPhysicTable(virtualTable, tail);
|
||||
if (NeedCreateTable(entityMetadata) || !isOnStart)
|
||||
if ((NeedCreateTable(entityMetadata) || !isOnStart)&&(!needCreateTable.HasValue|| needCreateTable.Value))
|
||||
{
|
||||
try
|
||||
{
|
||||
|
|
|
@ -18,6 +18,8 @@ namespace ShardingCore.DynamicDataSources
|
|||
/// <param name="dataSourceName"></param>
|
||||
/// <param name="connectionString"></param>
|
||||
/// <param name="isOnStart">当前是否是启动时被调用</param>
|
||||
void InitConfigure(IVirtualDataSource<TShardingDbContext> virtualDataSource,string dataSourceName, string connectionString,bool isOnStart);
|
||||
/// <param name="needCreateDatabase">当前是否是启动时被调用</param>
|
||||
/// <param name="needCreateTable">当前是否是启动时被调用</param>
|
||||
void InitConfigure(IVirtualDataSource<TShardingDbContext> virtualDataSource, string dataSourceName, string connectionString, bool isOnStart, bool? needCreateDatabase = null, bool? needCreateTable = null);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -55,11 +55,13 @@ namespace ShardingCore.Helpers
|
|||
/// <param name="virtualDataSource"></param>
|
||||
/// <param name="dataSourceName"></param>
|
||||
/// <param name="connectionString"></param>
|
||||
public static void DynamicAppendDataSource<TShardingDbContext>(IVirtualDataSource<TShardingDbContext> virtualDataSource, string dataSourceName, string connectionString) where TShardingDbContext : DbContext, IShardingDbContext
|
||||
/// <param name="createDatabase"></param>
|
||||
/// <param name="createTable"></param>
|
||||
public static void DynamicAppendDataSource<TShardingDbContext>(IVirtualDataSource<TShardingDbContext> virtualDataSource, string dataSourceName, string connectionString,bool? createDatabase=null,bool? createTable=null) where TShardingDbContext : DbContext, IShardingDbContext
|
||||
{
|
||||
var defaultDataSourceInitializer = ShardingContainer.GetService<IDataSourceInitializer<TShardingDbContext>>();
|
||||
virtualDataSource.AddPhysicDataSource(new DefaultPhysicDataSource(dataSourceName, connectionString, false));
|
||||
defaultDataSourceInitializer.InitConfigure(virtualDataSource, dataSourceName, connectionString, false);
|
||||
defaultDataSourceInitializer.InitConfigure(virtualDataSource, dataSourceName, connectionString, false,createDatabase,createTable);
|
||||
}
|
||||
/// <summary>
|
||||
/// 动态添加数据源
|
||||
|
@ -68,14 +70,16 @@ namespace ShardingCore.Helpers
|
|||
/// <param name="configId"></param>
|
||||
/// <param name="dataSourceName"></param>
|
||||
/// <param name="connectionString"></param>
|
||||
public static void DynamicAppendDataSource<TShardingDbContext>(string configId, string dataSourceName, string connectionString) where TShardingDbContext : DbContext, IShardingDbContext
|
||||
/// <param name="createDatabase"></param>
|
||||
/// <param name="createTable"></param>
|
||||
public static void DynamicAppendDataSource<TShardingDbContext>(string configId, string dataSourceName, string connectionString, bool? createDatabase = null, bool? createTable = null) where TShardingDbContext : DbContext, IShardingDbContext
|
||||
{
|
||||
var defaultDataSourceInitializer = ShardingContainer.GetService<IDataSourceInitializer<TShardingDbContext>>();
|
||||
var virtualDataSourceManager = ShardingContainer.GetService<IVirtualDataSourceManager<TShardingDbContext>>();
|
||||
|
||||
var virtualDataSource = virtualDataSourceManager.GetVirtualDataSource(configId);
|
||||
virtualDataSource.AddPhysicDataSource(new DefaultPhysicDataSource(dataSourceName, connectionString, false));
|
||||
defaultDataSourceInitializer.InitConfigure(virtualDataSource, dataSourceName, connectionString, false);
|
||||
defaultDataSourceInitializer.InitConfigure(virtualDataSource, dataSourceName, connectionString, false, createDatabase, createTable);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
Loading…
Reference in New Issue