diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/CacheProvider/CacheProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/CacheProvider/CacheProvider.cs new file mode 100644 index 000000000..acb601470 --- /dev/null +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/CacheProvider/CacheProvider.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SqlSugar +{ + public class SugarCacheProvider + { + public ICacheService Servie { get; set; } + + public void RemoveDataCache(string likeString) + { + if (Servie == null) return; + CacheSchemeMain.RemoveCacheByLike(Servie, likeString); + } + + public List GetAllKey() + { + if (Servie == null) return new List(); + return Servie.GetAllKey()?.ToList(); + } + + public void Add(string key,object value) + { + if (Servie == null) return; + Servie.Add(key,value,60*60*24*100); + } + + public void Add(string key, object value,int seconds) + { + if (Servie == null) return; + Servie.Add(key, value,seconds); + } + + public T Get(string key) + { + if (Servie == null) return default(T); + return Servie.Get(key); + } + } +} diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs index 374d1e918..ac7aaacdf 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs @@ -238,7 +238,15 @@ namespace SqlSugar }; return this; } - + public IDeleteable RemoveDataCache(string likeString) + { + this.RemoveCacheFunc = () => + { + var cacheService = this.Context.CurrentConnectionConfig.ConfigureExternalServices.DataInfoCacheService; + CacheSchemeMain.RemoveCacheByLike(cacheService, likeString); + }; + return this; + } public IDeleteable In(List primaryKeyValues) { if (primaryKeyValues == null || primaryKeyValues.Count() == 0) diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs index 1efa61dee..c16512e94 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs @@ -188,19 +188,20 @@ namespace SqlSugar if (columns == null) columns = new string[] { }; this.InsertBuilder.DbColumnInfoList = this.InsertBuilder.DbColumnInfoList.Where(it => !columns.Any(ig => ig.Equals(it.PropertyName, StringComparison.CurrentCultureIgnoreCase))).ToList(); + this.InsertBuilder.DbColumnInfoList = this.InsertBuilder.DbColumnInfoList.Where(it => !columns.Any(ig => ig.Equals(it.DbColumnName, StringComparison.CurrentCultureIgnoreCase))).ToList(); return this; } public IInsertable InsertColumns(Expression> columns) { var ignoreColumns = InsertBuilder.GetExpressionValue(columns, ResolveExpressType.ArraySingle).GetResultArray().Select(it => this.SqlBuilder.GetNoTranslationColumnName(it)).ToList(); - this.InsertBuilder.DbColumnInfoList = this.InsertBuilder.DbColumnInfoList.Where(it => ignoreColumns.Any(ig => ig.Equals(it.PropertyName, StringComparison.CurrentCultureIgnoreCase))).ToList(); + this.InsertBuilder.DbColumnInfoList = this.InsertBuilder.DbColumnInfoList.Where(it => ignoreColumns.Any(ig => ig.Equals(it.PropertyName, StringComparison.CurrentCultureIgnoreCase)) || ignoreColumns.Any(ig => ig.Equals(it.DbColumnName, StringComparison.CurrentCultureIgnoreCase))).ToList(); return this; } public IInsertable InsertColumns(string[] columns) { - this.InsertBuilder.DbColumnInfoList = this.InsertBuilder.DbColumnInfoList.Where(it => columns.Any(ig => ig.Equals(it.PropertyName, StringComparison.CurrentCultureIgnoreCase))).ToList(); + this.InsertBuilder.DbColumnInfoList = this.InsertBuilder.DbColumnInfoList.Where(it => columns.Any(ig => ig.Equals(it.PropertyName, StringComparison.CurrentCultureIgnoreCase))|| columns.Any(ig => ig.Equals(it.DbColumnName, StringComparison.CurrentCultureIgnoreCase))).ToList(); return this; } @@ -228,6 +229,15 @@ namespace SqlSugar }; return this; } + public IInsertable RemoveDataCache(string likeString) + { + this.RemoveCacheFunc = () => + { + var cacheService = this.Context.CurrentConnectionConfig.ConfigureExternalServices.DataInfoCacheService; + CacheSchemeMain.RemoveCacheByLike(cacheService, likeString); + }; + return this; + } public MySqlBlueCopy UseMySql() { return new MySqlBlueCopy(this.Context, this.SqlBuilder, InsertObjs); diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/InsertableProvider/SubInserable.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/InsertableProvider/SubInserable.cs index 40af24fda..87545952f 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/InsertableProvider/SubInserable.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/InsertableProvider/SubInserable.cs @@ -166,6 +166,10 @@ namespace SqlSugar child.GetType().GetProperty(subMemberName).SetValue(child, pkValue); } } + if (!(childList as IEnumerable).Any()) + { + continue; + } var type = (childList as IEnumerable).First().GetType(); this.Context.InitMappingInfo(type); var entityInfo = this.Context.EntityMaintenance.GetEntityInfo(type); diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs index cb429cb2f..f87dda264 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs @@ -622,6 +622,7 @@ namespace SqlSugar if (QueryBuilder.Take == null) QueryBuilder.Take = 1; _PartitionBy(expression); + QueryBuilder.DisableTop = true; return this; } public virtual ISugarQueryable PartitionBy(string groupFileds) @@ -750,6 +751,9 @@ namespace SqlSugar var result = InstanceFactory.GetQueryable(this.Context.CurrentConnectionConfig); result.Context = this.Context; result.SqlBuilder = this.SqlBuilder; + result.QueryBuilder.ResultType = this.QueryBuilder.ResultType; + result.IsCache = this.IsCache; + result.CacheTime = this.CacheTime; QueryBuilder.SelectValue = selectValue; if (this.IsAs) { @@ -953,6 +957,7 @@ namespace SqlSugar public virtual DataTable ToDataTable() { + QueryBuilder.ResultType = typeof(SugarCacheDataTable); InitMapping(); var sqlObj = this.ToSql(); RestoreMapping(); @@ -1001,6 +1006,7 @@ namespace SqlSugar public Dictionary ToDictionary(Expression> key, Expression> value) { + this.QueryBuilder.ResultType = typeof(SugarCacheDictionary); var keyName = QueryBuilder.GetExpressionValue(key, ResolveExpressType.FieldSingle).GetResultString(); var valueName = QueryBuilder.GetExpressionValue(value, ResolveExpressType.FieldSingle).GetResultString(); var result = this.Select>(keyName + "," + valueName).ToList().ToDictionary(it => it.Key.ObjToString(), it => it.Value); @@ -1008,8 +1014,9 @@ namespace SqlSugar } public async Task> ToDictionaryAsync(Expression> key, Expression> value) { - var keyName = QueryBuilder.GetExpressionValue(key, ResolveExpressType.FieldSingle); - var valueName = QueryBuilder.GetExpressionValue(value, ResolveExpressType.FieldSingle); + this.QueryBuilder.ResultType = typeof(SugarCacheDictionary); + var keyName = QueryBuilder.GetExpressionValue(key, ResolveExpressType.FieldSingle).GetResultString(); + var valueName = QueryBuilder.GetExpressionValue(value, ResolveExpressType.FieldSingle).GetResultString(); var list = await this.Select>(keyName + "," + valueName).ToListAsync(); var result =list.ToDictionary(it => it.Key.ObjToString(), it => it.Value); return result; @@ -1323,6 +1330,7 @@ namespace SqlSugar } public async Task ToDataTableAsync() { + QueryBuilder.ResultType = typeof(SugarCacheDataTable); InitMapping(); var sqlObj = this.ToSql(); RestoreMapping(); diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs index f97f197d0..fb38272f1 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs @@ -40,6 +40,7 @@ namespace SqlSugar public int ExternalPageIndex { get; set; } public int ExternalPageSize { get; set; } public int? Take { get; set; } + public bool DisableTop { get; set; } public string OrderByValue { get; set; } public object SelectValue { get; set; } public string SelectCacheKey { get; set; } @@ -47,6 +48,7 @@ namespace SqlSugar public Type EntityType { get; set; } + public Type ResultType { get; set; } public string TableWithString { get; set; } public string GroupByValue { get; set; } public string PartitionByValue { get; set; } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SugarProvider/SqlSugarProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SugarProvider/SqlSugarProvider.cs index 57af42017..2e23d2b12 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SugarProvider/SqlSugarProvider.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SugarProvider/SqlSugarProvider.cs @@ -544,6 +544,7 @@ namespace SqlSugar List>> allItems = new List>>(); foreach (var item in queryables) { + item.QueryBuilder.DisableTop = true; var sqlObj = item.ToSql(); string sql = sqlObj.Key; UtilMethods.RepairReplicationParameters(ref sql, sqlObj.Value.ToArray(), i, "Union"); @@ -1068,5 +1069,21 @@ namespace SqlSugar } #endregion + + #region Cache + public SugarCacheProvider DataCache + { + get { + var services=this.CurrentConnectionConfig.ConfigureExternalServices; + if (services == null) + return new SugarCacheProvider(); + if (services.DataInfoCacheService == null) + return new SugarCacheProvider(); + SugarCacheProvider cache = new SugarCacheProvider(); + cache.Servie=services.DataInfoCacheService; + return cache; + } + } + #endregion } } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs index b21ae8323..45d7b38a5 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs @@ -97,6 +97,15 @@ namespace SqlSugar }; return this; } + public IUpdateable RemoveDataCache(string likeString) + { + this.RemoveCacheFunc = () => + { + var cacheService = this.Context.CurrentConnectionConfig.ConfigureExternalServices.DataInfoCacheService; + CacheSchemeMain.RemoveCacheByLike(cacheService,likeString); + }; + return this; + } public IUpdateable IsEnableUpdateVersionValidation() { this.IsVersionValidation = true; @@ -740,11 +749,11 @@ namespace SqlSugar private void ThrowUpdateByExpression() { - Check.Exception(UpdateParameterIsNull == true, ErrorMessage.GetThrowMessage("no support SetColumns and Where ", "根据对象进行更新 db.Updateable(现有集合对象) 禁止使用 SetColumns和Where,你可以使用 WhereColumns UpdateColumns 等。更新分为2种方式 1.根据表达式更新 2.根据实体或者集合更新, 具体用法请查看文档 ")); + Check.Exception(UpdateParameterIsNull == true, ErrorMessage.GetThrowMessage(" no support UpdateColumns and WhereColumns", "根据表达式更新 db.Updateable() 禁止使用 UpdateColumns和WhereColumns,你可以使用 SetColumns Where 等。更新分为2种方式 1.根据表达式更新 2.根据实体或者集合更新, 具体用法请查看文档 ")); } private void ThrowUpdateByObject() { - Check.Exception(UpdateParameterIsNull == false, ErrorMessage.GetThrowMessage("no support UpdateColumns and WhereColumns ", "根据表达式进行更新 禁止使用 UpdateColumns和WhereColumns ,你可以使用SetColumns 和 Where。 更新分为2种方式 1.根据表达式更新 2.根据实体或者集合更新 , 具体用法请查看文档 ")); + Check.Exception(UpdateParameterIsNull == false, ErrorMessage.GetThrowMessage(" no support SetColumns and Where", "根据对像更新 db.Updateabe(对象) 禁止使用 SetColumns和Where ,你可以使用WhereColumns 和 UpdateColumns。 更新分为2种方式 1.根据表达式更新 2.根据实体或者集合更新 , 具体用法请查看文档 ")); } #endregion } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/CacheScheme/CacheKeyBuider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/CacheScheme/CacheKeyBuider.cs index 856a06863..5cba87306 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/CacheScheme/CacheKeyBuider.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/CacheScheme/CacheKeyBuider.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Data; using System.Linq; using System.Text; @@ -13,6 +14,10 @@ namespace SqlSugar result.Database = context.Context.Ado.Connection.Database; AddTables(context, queryBuilder, result); AddIdentificationList(queryBuilder, result); + if (queryBuilder.ResultType!=null) + { + result.IdentificationList.Add(queryBuilder.ResultType.FullName); + } return result; } @@ -58,4 +63,17 @@ namespace SqlSugar } } } + + internal class SugarCacheDictionary + { + + } + internal class SugarCacheDictionaryList + { + + } + internal class SugarCacheDataTable + { + + } } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/CacheScheme/CacheSchemeMain.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/CacheScheme/CacheSchemeMain.cs index d9bbd4440..c487e330d 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/CacheScheme/CacheSchemeMain.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/CacheScheme/CacheSchemeMain.cs @@ -33,5 +33,23 @@ namespace SqlSugar } } } + public static void RemoveCacheByLike(ICacheService cacheService, string likeString) + { + if (cacheService == null) + { + return; + } + var keys = cacheService.GetAllKey(); + if (keys.HasValue()) + { + foreach (var item in keys) + { + if (item.ToLower().Contains(likeString.ToLower())) + { + cacheService.Remove(item); + } + } + } + } } } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs index fae2c88e3..af9e70668 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs @@ -134,7 +134,14 @@ namespace SqlSugar base.Start(); string parameterName = this.Context.SqlParameterKeyWord + ExpressionConst.Const + this.Context.ParameterIndex; parameter.Context.Result.Append(base.Context.GetEqString(memberName, parameterName)); - this.Context.Parameters.Add(new SugarParameter(parameterName, parameter.CommonTempData)); + var addItem = new SugarParameter(parameterName, parameter.CommonTempData); + var dataType = UtilMethods.GetUnderType(item.Type); + if (addItem.Value == null && dataType == UtilConstants.DateType) + { + addItem.DbType = System.Data.DbType.Date; + + } + this.Context.Parameters.Add(addItem); this.Context.ParameterIndex++; } else if (item is MemberExpression) diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Infrastructure/InstanceFactory.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Infrastructure/InstanceFactory.cs index 2f70bd7ae..a986242f8 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Infrastructure/InstanceFactory.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Infrastructure/InstanceFactory.cs @@ -9,7 +9,7 @@ namespace SqlSugar public class InstanceFactory { - static Assembly assembly = Assembly.Load(UtilConstants.AssemblyName); + static Assembly assembly = Assembly.GetExecutingAssembly(); static Dictionary typeCache = new Dictionary(); public static bool NoCache = false; diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/IDeleteable.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/IDeleteable.cs index e50a40e44..db3006695 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/IDeleteable.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/IDeleteable.cs @@ -32,6 +32,7 @@ namespace SqlSugar IDeleteable WhereColumns(Expression> columns); IDeleteable EnableDiffLogEvent(object businessData = null); IDeleteable RemoveDataCache(); + IDeleteable RemoveDataCache(string likeString); KeyValuePair> ToSql(); void AddQueue(); } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/IQueryable.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/IQueryable.cs index 1cfce868c..597655774 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/IQueryable.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/IQueryable.cs @@ -14,6 +14,8 @@ namespace SqlSugar SqlSugarProvider Context { get; set; } ISqlBuilder SqlBuilder { get; set; } QueryBuilder QueryBuilder { get; set; } + bool IsCache { get; set; } + int CacheTime { get; set; } ISugarQueryable Clone(); ISugarQueryable AS(string tableName); ISugarQueryable AS(string tableName); diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/ISqlSugarClient.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/ISqlSugarClient.cs index 08b959f95..a0999fd0a 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/ISqlSugarClient.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/ISqlSugarClient.cs @@ -160,7 +160,11 @@ namespace SqlSugar IUpdateable Updateable(Expression> columns) where T : class, new(); IUpdateable Updateable(List UpdateObjs) where T : class, new(); IUpdateable Updateable(T UpdateObj) where T : class, new(); - IUpdateable Updateable(T[] UpdateObjs) where T : class, new(); + IUpdateable Updateable(T[] UpdateObjs) where T : class, new(); + #endregion + + #region Cache + SugarCacheProvider DataCache { get; } #endregion } } \ No newline at end of file diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/IUpdateable.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/IUpdateable.cs index fa2aa7359..74488fd9e 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/IUpdateable.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/IUpdateable.cs @@ -87,6 +87,7 @@ namespace SqlSugar IUpdateable EnableDiffLogEvent(object businessData = null); IUpdateable ReSetValue(Expression> setValueExpression); IUpdateable RemoveDataCache(); + IUpdateable RemoveDataCache(string likeString); IUpdateable CallEntityMethod(Expression> method); KeyValuePair> ToSql(); void AddQueue(); diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/Insertable.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/Insertable.cs index 431c35071..11402f753 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/Insertable.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/Insertable.cs @@ -36,6 +36,7 @@ namespace SqlSugar IInsertable EnableDiffLogEvent(object businessData = null); IInsertable RemoveDataCache(); + IInsertable RemoveDataCache(string likeString); KeyValuePair> ToSql(); SqlServerBlueCopy UseSqlServer(); MySqlBlueCopy UseMySql(); diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/MySql/SqlBuilder/MySqlBlueCopy.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/MySql/SqlBuilder/MySqlBlueCopy.cs index e301c2761..3c9dfc489 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/MySql/SqlBuilder/MySqlBlueCopy.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/MySql/SqlBuilder/MySqlBlueCopy.cs @@ -25,13 +25,12 @@ namespace SqlSugar this.Builder = builder; this.Entitys = entitys; } - public bool ExecuteBlueCopy(string chara) + public bool ExecuteBlueCopy(string characterSet) { - this.Chara = chara; + this.Chara = characterSet; return ExecuteBlueCopy(); } - public bool ExecuteBlueCopy() { var IsBulkLoad = false; @@ -61,9 +60,9 @@ namespace SqlSugar var name = p.Name; if (entity.Columns.Any(it => it.PropertyName == name)) { - name=entity.Columns.First(it => it.PropertyName == name).DbColumnName; + name = entity.Columns.First(it => it.PropertyName == name).DbColumnName; } - row[name] = p.GetValue(item, null); + row[name] = GetValue(p, item); }); dt.Rows.Add(row); } @@ -75,7 +74,7 @@ namespace SqlSugar } var fileName = dllPath + "\\" + Guid.NewGuid().ToString() + ".csv"; var dataTableToCsv = DataTableToCsvString(dt); - File.WriteAllText(fileName, dataTableToCsv, Encoding.UTF8); + File.WriteAllText(fileName, dataTableToCsv, new UTF8Encoding(false)); MySqlConnection conn = this.Context.Ado.Connection as MySqlConnection; try { @@ -112,29 +111,30 @@ namespace SqlSugar return IsBulkLoad; ; } + public Task ExecuteBlueCopyAsync() + { + return Task.FromResult(ExecuteBlueCopy()); + } + + public Task ExecuteBlueCopyAsync(string characterSet) + { + this.Chara = characterSet; + return Task.FromResult(ExecuteBlueCopy()); + } + + #region Helper private string GetChara() { if (this.Chara == null) { return "UTF8"; } - else + else { return this.Chara; } } - public Task ExecuteBlueCopyAsync() - { - return Task.FromResult(ExecuteBlueCopy()); - } - - public Task ExecuteBlueCopyAsync(string chara) - { - this.Chara = chara; - return Task.FromResult(ExecuteBlueCopy()); - } - private void CloseDb() { if (this.Context.CurrentConnectionConfig.IsAutoCloseConnection && this.Context.Ado.Transaction == null) @@ -170,5 +170,21 @@ namespace SqlSugar } return sb.ToString(); } + + + private static object GetValue(PropertyInfo p, T item) + { + var result= p.GetValue(item, null); + if (result != null && UtilMethods.GetUnderType(p.PropertyType) == UtilConstants.BoolType) + { + if (result.ObjToBool() == false) + { + result = null; + } + } + return result; + } + + #endregion } } \ No newline at end of file diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/SqlServer/SqlBuilder/SqlServerQueryBuilder.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/SqlServer/SqlBuilder/SqlServerQueryBuilder.cs index 141d374bb..ca7da927c 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/SqlServer/SqlBuilder/SqlServerQueryBuilder.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/SqlServer/SqlBuilder/SqlServerQueryBuilder.cs @@ -28,7 +28,7 @@ namespace SqlSugar { this.OrderByValue = this.PartitionByValue + this.OrderByValue; } - var isFirst = (Skip == 0 || Skip == null) && Take == 1; + var isFirst = (Skip == 0 || Skip == null) && Take == 1&&DisableTop==false; var isRowNumber = (Skip != null || Take != null) && !isFirst; var rowNumberString = string.Format(",ROW_NUMBER() OVER({0}) AS RowIndex ", GetOrderByString); string groupByValue = GetGroupByString + HavingInfos; diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SqlSugarClient.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SqlSugarClient.cs index 2cd933a45..cd962b622 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SqlSugarClient.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SqlSugarClient.cs @@ -718,6 +718,13 @@ namespace SqlSugar #endregion + #region Cache + public SugarCacheProvider DataCache + { + get { return this.Context.DataCache; } + } + #endregion + #region Other method public DateTime GetDate() {