Update core

This commit is contained in:
sunkaixuan 2022-04-21 00:08:13 +08:00
parent 216b6adee6
commit 7d25c66f80
7 changed files with 43 additions and 2 deletions

View File

@ -21,7 +21,8 @@ namespace SqlSugar
private bool IsDefaultValue { get; set; } private bool IsDefaultValue { get; set; }
private Func<string, bool> WhereColumnsfunc; private Func<string, bool> WhereColumnsfunc;
private Func<string, string> FormatFileNameFunc { get; set; } private Func<string, string> FormatFileNameFunc { get; set; }
private bool IsStringNullable {get;set;} private bool IsStringNullable {get;set; }
private Func<DbColumnInfo,string,string,string> PropertyTextTemplateFunc { get; set; }
private ISqlBuilder SqlBuilder private ISqlBuilder SqlBuilder
{ {
get get
@ -97,6 +98,11 @@ namespace SqlSugar
this.PropertyTemplate = func(this.PropertyTemplate); this.PropertyTemplate = func(this.PropertyTemplate);
return this; return this;
} }
public IDbFirst SettingPropertyTemplate(Func<DbColumnInfo, string,string,string> func)
{
this.PropertyTextTemplateFunc = func;
return this;
}
public RazorFirst UseRazorAnalysis(string razorClassTemplate, string classNamespace = "Models") public RazorFirst UseRazorAnalysis(string razorClassTemplate, string classNamespace = "Models")
{ {
if (razorClassTemplate == null) if (razorClassTemplate == null)
@ -264,7 +270,7 @@ namespace SqlSugar
string PropertyDescriptionText = this.PropertyDescriptionTemplate; string PropertyDescriptionText = this.PropertyDescriptionTemplate;
string propertyName = GetPropertyName(item); string propertyName = GetPropertyName(item);
string propertyTypeName = GetPropertyTypeName(item); string propertyTypeName = GetPropertyTypeName(item);
PropertyText = GetPropertyText(item, PropertyText); PropertyText =this.PropertyTextTemplateFunc == null? GetPropertyText(item, PropertyText):this.PropertyTextTemplateFunc(item,this.PropertyTemplate, propertyTypeName);
PropertyDescriptionText = GetPropertyDescriptionText(item, PropertyDescriptionText); PropertyDescriptionText = GetPropertyDescriptionText(item, PropertyDescriptionText);
PropertyText = PropertyDescriptionText + PropertyText; PropertyText = PropertyDescriptionText + PropertyText;
classText = classText.Replace(DbFirstTemplate.KeyPropertyName, PropertyText + (isLast ? "" : ("\r\n" + DbFirstTemplate.KeyPropertyName))); classText = classText.Replace(DbFirstTemplate.KeyPropertyName, PropertyText + (isLast ? "" : ("\r\n" + DbFirstTemplate.KeyPropertyName)));
@ -284,6 +290,7 @@ namespace SqlSugar
classText = classText.Replace(DbFirstTemplate.KeyPropertyName, null); classText = classText.Replace(DbFirstTemplate.KeyPropertyName, null);
return classText; return classText;
} }
internal string GetClassString(List<DbColumnInfo> columns, ref string className) internal string GetClassString(List<DbColumnInfo> columns, ref string className)
{ {
string classText = this.ClassTemplate; string classText = this.ClassTemplate;

View File

@ -9,6 +9,7 @@ namespace SqlSugar
{ {
public class FastBuilder public class FastBuilder
{ {
public virtual bool IsActionUpdateColumns { get; set; }
public SqlSugarProvider Context { get; set; } public SqlSugarProvider Context { get; set; }
public virtual string CharacterSet { get; set; } public virtual string CharacterSet { get; set; }
public virtual string UpdateSql { get; set; } = @"UPDATE TM public virtual string UpdateSql { get; set; } = @"UPDATE TM

View File

@ -128,6 +128,7 @@ namespace SqlSugar
this.context.CurrentConnectionConfig.IsAutoCloseConnection = false; this.context.CurrentConnectionConfig.IsAutoCloseConnection = false;
DataTable dt = ToDdateTable(datas); DataTable dt = ToDdateTable(datas);
IFastBuilder buider = GetBuider(); IFastBuilder buider = GetBuider();
ActionIgnoreColums(whereColumns, updateColumns, dt, buider.IsActionUpdateColumns);
buider.Context = context; buider.Context = context;
await buider.CreateTempAsync<T>(dt); await buider.CreateTempAsync<T>(dt);
await buider.ExecuteBulkCopyAsync(dt); await buider.ExecuteBulkCopyAsync(dt);
@ -142,6 +143,34 @@ namespace SqlSugar
End(datas, false); End(datas, false);
return result; return result;
} }
private void ActionIgnoreColums(string[] whereColumns, string[] updateColumns, DataTable dt,bool IsActionUpdateColumns)
{
if (entityInfo.Columns.Where(it => it.IsIgnore == false).Count() > whereColumns.Length + updateColumns.Length &&IsActionUpdateColumns)
{
var ignoreColums = dt.Columns.Cast<DataColumn>()
.Where(it => !whereColumns.Any(y => y.EqualCase(it.ColumnName)))
.Where(it => !updateColumns.Any(y => y.EqualCase(it.ColumnName))).ToList();
foreach (DataRow item in dt.Rows)
{
foreach (var col in ignoreColums)
{
if (item[col.ColumnName].IsNullOrEmpty())
{
if (col.DataType == UtilConstants.StringType)
{
item[col.ColumnName] = string.Empty;
}
else
{
item[col.ColumnName] = Activator.CreateInstance(col.DataType);
}
}
}
}
}
}
private async Task<int> _BulkUpdate(string tableName,DataTable dataTable, string[] whereColumns, string[] updateColumns) private async Task<int> _BulkUpdate(string tableName,DataTable dataTable, string[] whereColumns, string[] updateColumns)
{ {
var datas = new string[dataTable.Rows.Count].ToList(); var datas = new string[dataTable.Rows.Count].ToList();

View File

@ -10,6 +10,7 @@ namespace SqlSugar
IDbFirst SettingClassTemplate(Func<string, string> func); IDbFirst SettingClassTemplate(Func<string, string> func);
IDbFirst SettingClassDescriptionTemplate(Func<string, string> func); IDbFirst SettingClassDescriptionTemplate(Func<string, string> func);
IDbFirst SettingPropertyTemplate(Func<string, string> func); IDbFirst SettingPropertyTemplate(Func<string, string> func);
IDbFirst SettingPropertyTemplate(Func<DbColumnInfo, string,string,string> func);
IDbFirst SettingPropertyDescriptionTemplate(Func<string, string> func); IDbFirst SettingPropertyDescriptionTemplate(Func<string, string> func);
IDbFirst SettingConstructorTemplate(Func<string, string> func); IDbFirst SettingConstructorTemplate(Func<string, string> func);
IDbFirst SettingNamespaceTemplate(Func<string, string> func); IDbFirst SettingNamespaceTemplate(Func<string, string> func);

View File

@ -9,6 +9,7 @@ namespace SqlSugar
{ {
public interface IFastBuilder public interface IFastBuilder
{ {
bool IsActionUpdateColumns { get; set; }
SqlSugarProvider Context { get; set; } SqlSugarProvider Context { get; set; }
string CharacterSet { get; set; } string CharacterSet { get; set; }
Task<int> UpdateByTempAsync(string tableName,string tempName,string [] updateColumns,string[] whereColumns); Task<int> UpdateByTempAsync(string tableName,string tempName,string [] updateColumns,string[] whereColumns);

View File

@ -12,6 +12,7 @@ namespace SqlSugar
public class SqlServerFastBuilder:FastBuilder,IFastBuilder public class SqlServerFastBuilder:FastBuilder,IFastBuilder
{ {
public override bool IsActionUpdateColumns { get; set; } = true;
public async Task<int> ExecuteBulkCopyAsync(DataTable dt) public async Task<int> ExecuteBulkCopyAsync(DataTable dt)
{ {

View File

@ -14,6 +14,7 @@ namespace SqlSugar
private bool IsUpdate = false; private bool IsUpdate = false;
public string CharacterSet { get; set; } public string CharacterSet { get; set; }
private DataTable UpdateDataTable { get; set; } private DataTable UpdateDataTable { get; set; }
public bool IsActionUpdateColumns { get; set; }
public SqliteFastBuilder(EntityInfo entityInfo) public SqliteFastBuilder(EntityInfo entityInfo)
{ {
this.entityInfo = entityInfo; this.entityInfo = entityInfo;