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 try
{ {
Async();
InitParameters(ref sql, parameters); InitParameters(ref sql, parameters);
if (FormatSql != null) if (FormatSql != null)
sql = FormatSql(sql); sql = FormatSql(sql);
@ -422,6 +423,7 @@ namespace SqlSugar
{ {
try try
{ {
Async();
InitParameters(ref sql, parameters); InitParameters(ref sql, parameters);
if (FormatSql != null) if (FormatSql != null)
sql = FormatSql(sql); sql = FormatSql(sql);
@ -452,6 +454,7 @@ namespace SqlSugar
{ {
try try
{ {
Async();
InitParameters(ref sql, parameters); InitParameters(ref sql, parameters);
if (FormatSql != null) if (FormatSql != null)
sql = FormatSql(sql); sql = FormatSql(sql);
@ -482,6 +485,7 @@ namespace SqlSugar
} }
public virtual Task<DataSet> GetDataSetAllAsync(string sql, params SugarParameter[] parameters) public virtual Task<DataSet> GetDataSetAllAsync(string sql, params SugarParameter[] parameters)
{ {
Async();
//False asynchrony . No Support DataSet //False asynchrony . No Support DataSet
return Task.FromResult(GetDataSetAll(sql, parameters)); return Task.FromResult(GetDataSetAll(sql, parameters));
} }
@ -1152,17 +1156,13 @@ namespace SqlSugar
#endregion #endregion
#region Helper #region Helper
//private static void NextResult(IDataReader dataReader) private void Async()
//{ {
// try if (this.Context.Root != null & this.Context.Root.AsyncId == null)
// { {
// NextResult(dataReader); this.Context.Root.AsyncId = Guid.NewGuid(); ;
// } }
// 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 static bool NextResult(IDataReader dataReader) private static bool NextResult(IDataReader dataReader)
{ {
try try

View File

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

View File

@ -22,7 +22,7 @@ namespace SqlSugar
_Context = value; _Context = value;
} }
} }
public SqlSugarClient Root { get; set; }
public ConnectionConfig CurrentConnectionConfig { 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 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; } } public bool IsSystemTablesConfig { get { return this.CurrentConnectionConfig.InitKeyType == InitKeyType.SystemTable; } }

View File

@ -33,6 +33,7 @@ namespace SqlSugar
public bool IsEnableDiffLogEvent { get; set; } public bool IsEnableDiffLogEvent { get; set; }
public DiffLogModel diffModel { get; set; } public DiffLogModel diffModel { get; set; }
private Action RemoveCacheFunc { get; set; } private Action RemoveCacheFunc { get; set; }
private int SetColumnsIndex { get; set; }
#endregion #endregion
#region Core #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(); 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(); CheckTranscodeing();
AppendSets();
return this; return this;
} }
@ -244,10 +246,10 @@ namespace SqlSugar
string key = SqlBuilder.GetNoTranslationColumnName(expResult); string key = SqlBuilder.GetNoTranslationColumnName(expResult);
UpdateBuilder.SetValues.Add(new KeyValuePair<string, string>(SqlBuilder.GetTranslationColumnName(key), 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(); 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; return this;
} }
public IUpdateable<T> UpdateColumnsIF(bool isUpdateColumns, Expression<Func<T, object>> columns) public IUpdateable<T> UpdateColumnsIF(bool isUpdateColumns, Expression<Func<T, object>> columns)
{ {
if (isUpdateColumns) if (isUpdateColumns)
@ -372,6 +374,17 @@ namespace SqlSugar
#endregion #endregion
#region Helper #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() private string _ExecuteCommand()
{ {
PreToSql(); PreToSql();

View File

@ -96,7 +96,14 @@ namespace SqlSugar
var isField = memberExpr.Member.MemberType == MemberTypes.Field; var isField = memberExpr.Member.MemberType == MemberTypes.Field;
if (isProperty) if (isProperty)
{ {
reval = GetPropertyValue(memberExpr); try
{
reval = GetPropertyValue(memberExpr);
}
catch
{
reval = null;
}
} }
else if (isField) 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) 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))); parameter.Context.Result.Append(base.Context.GetEqString(memberName, GetNewExpressionValue(item)));
} }
else if (IsConst(item)) else if (IsConst(item))

View File

@ -22,6 +22,8 @@ namespace SqlSugar
private MappingColumnList _MappingColumns; private MappingColumnList _MappingColumns;
private IgnoreColumnList _IgnoreColumns; private IgnoreColumnList _IgnoreColumns;
private IgnoreColumnList _IgnoreInsertColumns; private IgnoreColumnList _IgnoreInsertColumns;
internal Guid? AsyncId { get; set; }
internal bool? IsSingleInstance { get; set; }
#endregion #endregion
@ -671,16 +673,44 @@ namespace SqlSugar
#region Helper #region Helper
private SqlSugarProvider GetContext() private SqlSugarProvider GetContext()
{ {
SqlSugarProvider result = null;
if (IsSameThreadAndShard()) if (IsSameThreadAndShard())
return SameThreadAndShard(); {
result = SameThreadAndShard();
}
else if (IsNoSameThreadAndShard()) else if (IsNoSameThreadAndShard())
return NoSameThreadAndShard(); {
result = NoSameThreadAndShard();
}
else if (IsSynchronization()) else if (IsSynchronization())
return Synchronization(); {
result = Synchronization();
}
else if (IsSingleInstanceAsync())
{
result = NoSameThreadAsync();
}
else if (IsAsync())
{
result = Synchronization();
}
else 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() private SqlSugarProvider NoSameThread()
{ {
if (CallContext.ContextList.Value == null) 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() private bool IsSynchronization()
{ {

View File

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