SplitTableAttribute(SplitType splitType,Type customSplitTableService)

This commit is contained in:
sunkaixuan
2023-05-28 20:32:17 +08:00
parent 2efe10a9ae
commit 358023fd25
6 changed files with 36 additions and 0 deletions

View File

@@ -54,8 +54,10 @@ namespace SqlSugar
var mappingInfo=this.Context.MappingTables.FirstOrDefault(it => it.EntityName == entityType.Name); var mappingInfo=this.Context.MappingTables.FirstOrDefault(it => it.EntityName == entityType.Name);
if (mappingInfo == null) if (mappingInfo == null)
{ {
UtilMethods.StartCustomSplitTable(this.Context,entityType);
this.Context.CodeFirst.SplitTables().InitTables(entityType); this.Context.CodeFirst.SplitTables().InitTables(entityType);
this.Context.MappingTables.RemoveAll(it=>it.EntityName==entityType.Name); this.Context.MappingTables.RemoveAll(it=>it.EntityName==entityType.Name);
UtilMethods.EndCustomSplitTable(this.Context, entityType);
return; return;
} }
} }

View File

@@ -360,6 +360,7 @@ namespace SqlSugar
var tables = getTableNamesFunc(helper.GetTables()); var tables = getTableNamesFunc(helper.GetTables());
result.Tables = tables; result.Tables = tables;
result.deleteobj = this; result.deleteobj = this;
UtilMethods.StartCustomSplitTable(this.Context, typeof(T));
return result; return result;
} }
public SplitTableDeleteByObjectProvider<T> SplitTable() public SplitTableDeleteByObjectProvider<T> SplitTable()
@@ -373,6 +374,7 @@ namespace SqlSugar
EntityInfo = this.EntityInfo EntityInfo = this.EntityInfo
}; };
result.deleteobj = this; result.deleteobj = this;
UtilMethods.StartCustomSplitTable(this.Context, typeof(T));
return result; return result;
} }
public LogicDeleteProvider<T> IsLogic() public LogicDeleteProvider<T> IsLogic()

View File

@@ -665,6 +665,7 @@ namespace SqlSugar
} }
public SplitInsertable<T> SplitTable(SplitType splitType) public SplitInsertable<T> SplitTable(SplitType splitType)
{ {
UtilMethods.StartCustomSplitTable(this.Context, typeof(T));
SplitTableContext helper = new SplitTableContext(Context) SplitTableContext helper = new SplitTableContext(Context)
{ {
EntityInfo = this.EntityInfo EntityInfo = this.EntityInfo
@@ -688,6 +689,7 @@ namespace SqlSugar
public SplitInsertable<T> SplitTable() public SplitInsertable<T> SplitTable()
{ {
UtilMethods.StartCustomSplitTable(this.Context, typeof(T));
var splitTableAttribute = typeof(T).GetCustomAttribute<SplitTableAttribute>(); var splitTableAttribute = typeof(T).GetCustomAttribute<SplitTableAttribute>();
if (splitTableAttribute != null) if (splitTableAttribute != null)
{ {

View File

@@ -221,6 +221,7 @@ namespace SqlSugar
} }
public SplitTableUpdateProvider<T> SplitTable(Func<List<SplitTableInfo>, IEnumerable<SplitTableInfo>> getTableNamesFunc) public SplitTableUpdateProvider<T> SplitTable(Func<List<SplitTableInfo>, IEnumerable<SplitTableInfo>> getTableNamesFunc)
{ {
UtilMethods.StartCustomSplitTable(this.Context, typeof(T));
this.Context.MappingTables.Add(this.EntityInfo.EntityName, this.EntityInfo.DbTableName); this.Context.MappingTables.Add(this.EntityInfo.EntityName, this.EntityInfo.DbTableName);
SplitTableUpdateProvider<T> result = new SplitTableUpdateProvider<T>(); SplitTableUpdateProvider<T> result = new SplitTableUpdateProvider<T>();
result.Context = this.Context; result.Context = this.Context;
@@ -235,6 +236,7 @@ namespace SqlSugar
} }
public SplitTableUpdateByObjectProvider<T> SplitTable() public SplitTableUpdateByObjectProvider<T> SplitTable()
{ {
UtilMethods.StartCustomSplitTable(this.Context, typeof(T));
Check.ExceptionEasy(UpdateParameterIsNull, "SplitTable() not supported db.Updateable<T>(),use db.Updateable(list)", ".SplitTable()不支持 db.Updateable<T>()方式更新,请使用 db.Updateable(list) 对象方式更新, 或者使用 .SplitTable(+1)重载"); Check.ExceptionEasy(UpdateParameterIsNull, "SplitTable() not supported db.Updateable<T>(),use db.Updateable(list)", ".SplitTable()不支持 db.Updateable<T>()方式更新,请使用 db.Updateable(list) 对象方式更新, 或者使用 .SplitTable(+1)重载");
SplitTableUpdateByObjectProvider<T> result = new SplitTableUpdateByObjectProvider<T>(); SplitTableUpdateByObjectProvider<T> result = new SplitTableUpdateByObjectProvider<T>();
result.Context = this.Context; result.Context = this.Context;

View File

@@ -10,10 +10,20 @@ namespace SqlSugar
public class SplitTableAttribute : Attribute public class SplitTableAttribute : Attribute
{ {
public SplitType SplitType { get; set; } public SplitType SplitType { get; set; }
public Type CustomSplitTableService { get; set; }
public SplitTableAttribute(SplitType splitType) public SplitTableAttribute(SplitType splitType)
{ {
this.SplitType = splitType; this.SplitType = splitType;
} }
public SplitTableAttribute(SplitType splitType,Type customSplitTableService)
{
this.SplitType = splitType;
if (!customSplitTableService.GetInterfaces().Any(it => it == typeof(ISplitTableService)))
{
Check.ExceptionEasy("customSplitTableService in SplitTableAttribute(SplitType splitType,Type customSplitTableService) must be inherited ISplitTableService", " SplitTableAttribute(SplitType splitType,Type customSplitTableService) 中的 customSplitTableService 必须继承 ISplitTableService");
}
this.CustomSplitTableService= customSplitTableService;
}
} }
[AttributeUsage(AttributeTargets.Property, Inherited = true)] [AttributeUsage(AttributeTargets.Property, Inherited = true)]

View File

@@ -17,6 +17,24 @@ namespace SqlSugar
{ {
public class UtilMethods public class UtilMethods
{ {
internal static void EndCustomSplitTable(ISqlSugarClient context,Type entityType)
{
var splitTableAttribute = entityType.GetCustomAttribute<SplitTableAttribute>();
if (splitTableAttribute.CustomSplitTableService != null)
{
context.CurrentConnectionConfig.ConfigureExternalServices.SplitTableService = null;
}
}
internal static void StartCustomSplitTable(ISqlSugarClient context, Type entityType)
{
var splitTableAttribute = entityType.GetCustomAttribute<SplitTableAttribute>();
if (splitTableAttribute.CustomSplitTableService != null)
{
context.CurrentConnectionConfig.ConfigureExternalServices.SplitTableService
= (ISplitTableService)Activator.CreateInstance(splitTableAttribute.CustomSplitTableService);
}
}
public static void ConvertParameter(SugarParameter p, ISqlBuilder builder) public static void ConvertParameter(SugarParameter p, ISqlBuilder builder)
{ {
if (!p.ParameterName.StartsWith(builder.SqlParameterKeyWord)) if (!p.ParameterName.StartsWith(builder.SqlParameterKeyWord))