Synchronization code

This commit is contained in:
sunkaixuan 2023-04-24 20:48:31 +08:00
parent 2fec6c07fb
commit f9221f173c
4 changed files with 55 additions and 3 deletions

View File

@ -232,13 +232,18 @@ namespace SqlSugar
var isAuto = this.context.CurrentConnectionConfig.IsAutoCloseConnection;
this.context.CurrentConnectionConfig.IsAutoCloseConnection = false;
dataTable.TableName = this.queryable.SqlBuilder.GetTranslationTableName(tableName);
DataTable dt = GetCopyWriteDataTable(dataTable);
DataTable dt = GetCopyWriteDataTableUpdate(dataTable);
IFastBuilder buider = GetBuider();
if (dt.Columns.Count != dataTable.Columns.Count)
{
ActionIgnoreColums(whereColumns, updateColumns, dt, buider.IsActionUpdateColumns);
}
buider.Context = context;
if (buider.DbFastestProperties == null)
{
buider.DbFastestProperties = new DbFastestProperties();
}
buider.DbFastestProperties.WhereColumns = whereColumns;
await buider.CreateTempAsync<object>(dt);
await buider.ExecuteBulkCopyAsync(dt);
//var queryTemp = this.context.Queryable<T>().AS(dt.TableName).ToList();//test

View File

@ -212,7 +212,53 @@ namespace SqlSugar
tempDataTable.TableName = dt.TableName;
return tempDataTable;
}
private DataTable GetCopyWriteDataTableUpdate(DataTable dt)
{
var sqlBuilder = this.context.Queryable<object>().SqlBuilder;
var dts = dt.Columns.Cast<DataColumn>().Select(it => sqlBuilder.GetTranslationColumnName(it.ColumnName)).ToList();
DataTable tempDataTable = null;
if (AsName == null)
{
tempDataTable = queryable.Where(it => false).Select(string.Join(",", dts)).ToDataTable();
}
else
{
tempDataTable = queryable.AS(AsName).Where(it => false).Select(string.Join(",", dts)).ToDataTable();
};
List<string> uInt64TypeName = new List<string>();
foreach (DataColumn item in tempDataTable.Columns)
{
if (item.DataType == typeof(UInt64))
{
uInt64TypeName.Add(item.ColumnName);
}
}
var temColumnsList = tempDataTable.Columns.Cast<DataColumn>().Select(it => it.ColumnName.ToLower()).ToList();
var columns = dt.Columns.Cast<DataColumn>().Where(it => temColumnsList.Contains(it.ColumnName.ToLower())).ToList();
foreach (DataRow item in dt.Rows)
{
DataRow dr = tempDataTable.NewRow();
foreach (DataColumn column in columns)
{
dr[column.ColumnName] = item[column.ColumnName];
if (dr[column.ColumnName] == null || dr[column.ColumnName] == DBNull.Value)
{
dr[column.ColumnName] = DBNull.Value;
}
else if (column.DataType == UtilConstants.BoolType && this.context.CurrentConnectionConfig.DbType.IsIn(DbType.MySql, DbType.MySqlConnector))
{
if (Convert.ToBoolean(dr[column.ColumnName]) == false && uInt64TypeName.Any(z => z.EqualCase(column.ColumnName)))
{
dr[column.ColumnName] = DBNull.Value;
}
}
}
tempDataTable.Rows.Add(dr);
}
tempDataTable.TableName = dt.TableName;
return tempDataTable;
}
private void RemoveCache()
{

View File

@ -624,9 +624,9 @@ namespace SqlSugar
}
}
}
if (this.EntityInfo.Columns.Any(it => it.InsertServerTime || it.UpdateSql.HasValue()))
if (this.EntityInfo.Columns.Any(it => it.UpdateServerTime || it.UpdateSql.HasValue()))
{
var appendColumns = this.EntityInfo.Columns.Where(it => it.InsertServerTime || it.UpdateSql.HasValue());
var appendColumns = this.EntityInfo.Columns.Where(it => it.UpdateServerTime || it.UpdateSql.HasValue());
foreach (var item in appendColumns)
{
if (item.UpdateServerTime)

View File

@ -9,5 +9,6 @@ namespace SqlSugar
public class DbFastestProperties
{
public bool HasOffsetTime { get; set; }
public string[] WhereColumns { get; set; }
}
}