Update ISugarDataConvert

This commit is contained in:
sunkaixuan 2024-01-20 20:42:04 +08:00
parent dab0dd61f8
commit 506415f71a
3 changed files with 36 additions and 2 deletions

View File

@ -40,6 +40,7 @@ namespace SqlSugar
public string ShortName { get; set; }
public Dictionary<string, ReSetValueBySqlExpListModel> ReSetValueBySqlExpList { get; set; }
public virtual string ReSetValueBySqlExpListType { get; set; }
public EntityInfo EntityInfo { get; set; }
public virtual string SqlTemplate
{
get
@ -287,11 +288,25 @@ namespace SqlSugar
{
if (IsWhereColumns == false)
{
int i = 100000;
foreach (var item in PrimaryKeys)
{
i++;
var isFirst = whereString == null;
whereString += (isFirst ? " WHERE " : " AND ");
whereString += Builder.GetTranslationColumnName(item) + "=" + this.Context.Ado.SqlParameterKeyWord + item;
var pkIsSugarDataConverter = GetPkIsSugarDataConverter();
if (pkIsSugarDataConverter && GetColumnInfo(item)!=null)
{
var columnInfo = GetColumnInfo(item);
var value=this.DbColumnInfoList.FirstOrDefault(it => it.DbColumnName.EqualCase(item) || it.PropertyName.EqualCase(item))?.Value;
var p = UtilMethods.GetParameterConverter(i, this.Context, value, this.EntityInfo, this.EntityInfo?.Columns.First(it => it.DbColumnName.Equals(item) || it.PropertyName.Equals(item)));
whereString += Builder.GetTranslationColumnName(item) + "=" + p.ParameterName;
this.Parameters.Add(p);
}
else
{
whereString += Builder.GetTranslationColumnName(item) + "=" + this.Context.Ado.SqlParameterKeyWord + item;
}
}
}
}
@ -311,6 +326,17 @@ namespace SqlSugar
return string.Format(SqlTemplate, GetTableNameString, columnsString, whereString);
}
private EntityColumnInfo GetColumnInfo(string item)
{
var columnInfo= this.EntityInfo?.Columns?.FirstOrDefault(it => it.DbColumnName.Equals(item) || it.PropertyName.Equals(item));
return columnInfo;
}
private bool GetPkIsSugarDataConverter()
{
return this.EntityInfo?.Columns.Any(it => it.IsPrimarykey && it.SqlParameterDbType is Type&&typeof(ISugarDataConverter).IsAssignableFrom((it.SqlParameterDbType as Type))) == true;
}
protected virtual string GetJoinUpdate(string columnsString, ref string whereString)
{
var tableName = Builder.GetTranslationColumnName(this.TableName);

View File

@ -379,7 +379,7 @@ namespace SqlSugar
|| columns.Contains(it.PropertyName, StringComparer.OrdinalIgnoreCase)
|| columns.Contains(it.DbColumnName, StringComparer.OrdinalIgnoreCase)).ToList();
}
UpdateBuilder.EntityInfo = this.EntityInfo;
UpdateBuilder.PrimaryKeys = GetPrimaryKeys();
if (this.IsWhereColumns)
{

View File

@ -76,6 +76,14 @@ namespace SqlSugar
var p = ParameterConverter.Invoke(obj, new object[] { value, 100+index }) as SugarParameter;
return p;
}
internal static SugarParameter GetParameterConverter(int index, ISqlSugarClient db, object value,EntityInfo entity, EntityColumnInfo columnInfo)
{
var type = columnInfo.SqlParameterDbType as Type;
var ParameterConverter = type.GetMethod("ParameterConverter").MakeGenericMethod(columnInfo.PropertyInfo.PropertyType);
var obj = Activator.CreateInstance(type);
var p = ParameterConverter.Invoke(obj, new object[] { value, 100 + index }) as SugarParameter;
return p;
}
internal static bool IsErrorParameterName(ConnectionConfig connectionConfig,DbColumnInfo columnInfo)
{
return connectionConfig.MoreSettings?.IsCorrectErrorSqlParameterName == true &&