Update Core

This commit is contained in:
610262374@qq.com 2019-06-18 20:40:36 +08:00
parent 2ad218a5ca
commit e66bbe0653
8 changed files with 83 additions and 23 deletions

View File

@ -391,6 +391,7 @@ namespace SqlSugar
{
try
{
Async();
InitParameters(ref sql, parameters);
if (FormatSql != null)
sql = FormatSql(sql);
@ -422,6 +423,7 @@ namespace SqlSugar
{
try
{
Async();
InitParameters(ref sql, parameters);
if (FormatSql != null)
sql = FormatSql(sql);
@ -452,6 +454,7 @@ namespace SqlSugar
{
try
{
Async();
InitParameters(ref sql, parameters);
if (FormatSql != null)
sql = FormatSql(sql);
@ -482,6 +485,7 @@ namespace SqlSugar
}
public virtual Task<DataSet> GetDataSetAllAsync(string sql, params SugarParameter[] parameters)
{
Async();
//False asynchrony . No Support DataSet
return Task.FromResult(GetDataSetAll(sql, parameters));
}
@ -1152,17 +1156,13 @@ namespace SqlSugar
#endregion
#region Helper
//private static void NextResult(IDataReader dataReader)
//{
// try
// {
// NextResult(dataReader);
// }
// catch
// {
// // Check.Exception(true, ErrorMessage.GetThrowMessage("Please reduce the number of T. Save Queue Changes queries don't have so many results", "请减少T的数量SaveQueueChanges 查询没有这么多结果"));
// }
//}
private void Async()
{
if (this.Context.Root != null & this.Context.Root.AsyncId == null)
{
this.Context.Root.AsyncId = Guid.NewGuid(); ;
}
}
private static bool NextResult(IDataReader dataReader)
{
try

View File

@ -184,7 +184,7 @@ namespace SqlSugar
{
using (dataReader)
{
if (type.Name.Contains("KeyValuePair"))
if (type.Name.StartsWith("KeyValuePair"))
{
return GetKeyValueList<T>(type, dataReader);
}
@ -206,7 +206,7 @@ namespace SqlSugar
{
using (dataReader)
{
if (type.Name.Contains("KeyValuePair"))
if (type.Name.StartsWith("KeyValuePair"))
{
return await GetKeyValueListAsync<T>(type, dataReader);
}
@ -226,7 +226,7 @@ namespace SqlSugar
}
public virtual List<T> DataReaderToListNoUsing<T>(Type type, IDataReader dataReader)
{
if (type.Name.Contains("KeyValuePair"))
if (type.Name.StartsWith("KeyValuePair"))
{
return GetKeyValueList<T>(type, dataReader);
}
@ -245,7 +245,7 @@ namespace SqlSugar
}
public virtual Task<List<T>> DataReaderToListNoUsingAsync<T>(Type type, IDataReader dataReader)
{
if (type.Name.Contains("KeyValuePair"))
if (type.Name.StartsWith("KeyValuePair"))
{
return GetKeyValueListAsync<T>(type, dataReader);
}

View File

@ -22,7 +22,7 @@ namespace SqlSugar
_Context = value;
}
}
public SqlSugarClient Root { get; set; }
public ConnectionConfig CurrentConnectionConfig { get; set; }
public Dictionary<string, object> TempItems { get { if (_TempItems == null) { _TempItems = new Dictionary<string, object>(); } return _TempItems; } set { _TempItems = value; } }
public bool IsSystemTablesConfig { get { return this.CurrentConnectionConfig.InitKeyType == InitKeyType.SystemTable; } }

View File

@ -33,6 +33,7 @@ namespace SqlSugar
public bool IsEnableDiffLogEvent { get; set; }
public DiffLogModel diffModel { get; set; }
private Action RemoveCacheFunc { get; set; }
private int SetColumnsIndex { get; set; }
#endregion
#region Core
@ -230,6 +231,7 @@ namespace SqlSugar
}
this.UpdateBuilder.DbColumnInfoList = UpdateBuilder.DbColumnInfoList.Where(it => (UpdateParameterIsNull==false&&IsPrimaryKey(it)) || UpdateBuilder.SetValues.Any(v => SqlBuilder.GetNoTranslationColumnName(v.Key).Equals(it.DbColumnName, StringComparison.CurrentCultureIgnoreCase) || SqlBuilder.GetNoTranslationColumnName(v.Key).Equals(it.PropertyName, StringComparison.CurrentCultureIgnoreCase)) || it.IsPrimarykey == true).ToList();
CheckTranscodeing();
AppendSets();
return this;
}
@ -244,10 +246,10 @@ namespace SqlSugar
string key = SqlBuilder.GetNoTranslationColumnName(expResult);
UpdateBuilder.SetValues.Add(new KeyValuePair<string, string>(SqlBuilder.GetTranslationColumnName(key), expResult));
this.UpdateBuilder.DbColumnInfoList = this.UpdateBuilder.DbColumnInfoList.Where(it => (UpdateParameterIsNull == false && IsPrimaryKey(it)) || UpdateBuilder.SetValues.Any(v => SqlBuilder.GetNoTranslationColumnName(v.Key).Equals(it.DbColumnName, StringComparison.CurrentCultureIgnoreCase) || SqlBuilder.GetNoTranslationColumnName(v.Key).Equals(it.PropertyName, StringComparison.CurrentCultureIgnoreCase)) || it.IsPrimarykey == true).ToList();
AppendSets();
return this;
}
public IUpdateable<T> UpdateColumnsIF(bool isUpdateColumns, Expression<Func<T, object>> columns)
{
if (isUpdateColumns)
@ -372,6 +374,17 @@ namespace SqlSugar
#endregion
#region Helper
private void AppendSets()
{
if (SetColumnsIndex > 0)
{
var keys = UpdateBuilder.SetValues.Select(it => SqlBuilder.GetNoTranslationColumnName(it.Key.ToLower())).ToList();
var addKeys = keys.Where(k => !this.UpdateBuilder.DbColumnInfoList.Any(it => it.PropertyName.ToLower() == k || it.DbColumnName.ToLower() == k)).ToList();
var addItems = this.EntityInfo.Columns.Where(it =>!GetPrimaryKeys().Any(p=>p.ToLower()==it.PropertyName?.ToLower()|| p.ToLower() == it.DbColumnName?.ToLower()) && addKeys.Any(k => it.PropertyName?.ToLower() == k || it.DbColumnName?.ToLower() == k)).ToList();
this.UpdateBuilder.DbColumnInfoList.AddRange(addItems.Select(it => new DbColumnInfo() { PropertyName = it.PropertyName, DbColumnName = it.DbColumnName }));
}
SetColumnsIndex++;
}
private string _ExecuteCommand()
{
PreToSql();

View File

@ -96,7 +96,14 @@ namespace SqlSugar
var isField = memberExpr.Member.MemberType == MemberTypes.Field;
if (isProperty)
{
reval = GetPropertyValue(memberExpr);
try
{
reval = GetPropertyValue(memberExpr);
}
catch
{
reval = null;
}
}
else if (isField)
{

View File

@ -109,6 +109,7 @@ namespace SqlSugar
}
else if (IsConst(item)&&IsConvert(item)&&UtilMethods.IsNullable(item.Type) && UtilMethods.GetUnderType(item.Type)==UtilConstants.BoolType)
{
item = (item as UnaryExpression).Operand;
parameter.Context.Result.Append(base.Context.GetEqString(memberName, GetNewExpressionValue(item)));
}
else if (IsConst(item))

View File

@ -22,6 +22,8 @@ namespace SqlSugar
private MappingColumnList _MappingColumns;
private IgnoreColumnList _IgnoreColumns;
private IgnoreColumnList _IgnoreInsertColumns;
internal Guid? AsyncId { get; set; }
internal bool? IsSingleInstance { get; set; }
#endregion
@ -671,16 +673,44 @@ namespace SqlSugar
#region Helper
private SqlSugarProvider GetContext()
{
SqlSugarProvider result = null;
if (IsSameThreadAndShard())
return SameThreadAndShard();
{
result = SameThreadAndShard();
}
else if (IsNoSameThreadAndShard())
return NoSameThreadAndShard();
{
result = NoSameThreadAndShard();
}
else if (IsSynchronization())
return Synchronization();
{
result = Synchronization();
}
else if (IsSingleInstanceAsync())
{
result = NoSameThreadAsync();
}
else if (IsAsync())
{
result = Synchronization();
}
else
return NoSameThread();
{
IsSingleInstance = true;
result = NoSameThread();
}
if (result.Root == null)
{
result.Root = this;
}
return result;
}
private SqlSugarProvider NoSameThreadAsync()
{
var result = GetCallContext();
return result;
}
private SqlSugarProvider NoSameThread()
{
if (CallContext.ContextList.Value == null)
@ -761,6 +791,15 @@ namespace SqlSugar
}
}
private bool IsAsync()
{
return AsyncId != null;
}
private bool IsSingleInstanceAsync()
{
return IsSingleInstance == true && AsyncId != null;
}
private bool IsSynchronization()
{

View File

@ -2,7 +2,7 @@
<package >
<metadata>
<id>sqlSugarCore</id>
<version>5.0.0.7</version>
<version>5.0.0.8</version>
<authors>sunkaixuan</authors>
<owners>Landa</owners>
<licenseUrl>http://www.apache.org/licenses/LICENSE-2.0.html</licenseUrl>