sqlSugarORM空记录子查询后,缓存表生成SQL错误

sqlSugarORM空记录子查询后,缓存表生成SQL错误

2023年7月20日发(作者:)

sqlSugarORM空记录⼦查询后,缓存表⽣成SQL错误

今天在开发中偶然发现了正常查询语句出现了错误,但是没改代码的情况下之前⼀直没问题呢,想了不出现错误和出现错误中间就改了⼀个参数。public static SqlSugarClient GetInstance() { SqlSugarClient db = new SqlSugarClient( new ConnectionConfig() { ConnectionString = tionString, DbType = ver, InitKeyType = ute,//从特性读取主键和⾃增列信息 IsAutoCloseConnection = true,//开启⾃动释放模式和EF原理⼀样我就不多解释了 IsShardSameThread = true//设为true相同线程是同⼀个SqlConnection //"server=118.178.94.27;Database=AltrainTest;Uid=sa;Pwd=string@111999" }); return db; }IsShardSameThread = true//设为true相同线程是同⼀个SqlConnection为了做事务,改了这个参数后就出现了以下错误这个错误是以下代码运⾏后⽣成的able() .Where(a => D == D && te == false && == MaterialSaleID) .SetColumns(a => leNum == showSaleNum) .ExecuteCommand();这是⼀条很正常的查询语句,每有问题,那问题就出现在其他地⽅。在重现错误的时候发现只能我把数据库⾥测试数据全部错误后,现调试程序就出现了这个错误。就是有数据的时候不出现,很郁闷的情况。在不知试了多少次后发现是之前⼀个嵌套查询引起的。var sq1 = ble((a, b) => new object[] { , alID == && D == .Where(a => D == D && te == false && D == PlaceID) .Select(); return ble(sq1) .WhereIF(!OrEmpty(), ) .OrderByIF(!OrEmpty(nfo), nfo) .ToPageList(dex, ze, ref umber, ref age); 这个查询且满⾜查出来记录是空才能触发错误。protected ISugarQueryable _As(string tableName, string entityName) { IsAs = true; OldMappingTableList = gTables; gTables = ateCopy(gTables); if ((it => Name == entityName)) { ((it => Name == entityName).DbTableName, tableName); } (entityName, tableName); bleMappingTableList = gTables; return this; }以上是查询后把查询的表保存到缓存。public virtual List ToPageList(int pageIndex, int pageSize, ref int totalNumber) { _RestoreMapping = false; List result = null; int count = (); _RestoreMapping = true; bledGobalFilter = Value(bledGobalFilter, () => { bledGobalFilter = true; if (count == 0) { result = new List();

} else result = ToPageList(pageIndex, pageSize); }); totalNumber = count; return result; }只有有记录的情况下程序进⼊ToPageList()⾥⾯,再进⼊protected void RestoreMapping() { if (IsAs && _RestoreMapping) { gTables = OldMappingTableList == null ? new MappingTableList() : OldMappingTableList; } }输出数据后会把旧的缓存赋值给缓存集合。public virtual List ToPageList(int pageIndex, int pageSize, ref int totalNumber) { _RestoreMapping = false; List result = null; int count = (); _RestoreMapping = true; bledGobalFilter = Value(bledGobalFilter, () => { bledGobalFilter = true; if (count == 0) { result = new List(); RestoreMapping(); } else result = ToPageList(pageIndex, pageSize); }); totalNumber = count; return result; }所以问题就是空记录的时候没有把旧缓存赋值给缓存集合,也不知道作者是有其他作⽤还是什么情况。这样的情况下后⾯的⽅法如果⽤到同名的缓存表,但⼜不是之前的语句时,就会读取缓存的SQL语句internal string GetClassString(DbTableInfo tableInfo, ref string className) { string classText; var columns = umnInfosByTableName(); if (ue()) { var entityName = ityName(); columns = (c => ).ToList(); } classText = emplate; string ConstructorText = IsDefaultValue ? uctorTemplate : null; if (ue()) { if (ue()) { className = Name; } if (mappingInfo != null) { classText = e(ssName, Name); } } !(ig => (entityName, tCultureIgnoreCase) && m var mappingInfo = rDefault(it => (, tCultureIgnoreCa这⾥就是后⾯读取缓存同名的时候把之前的SQL取出。也没太深⼊了解,只能是先在查询空的时候加⼊恢复缓存的⽅法来应急⽤了。

发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1689824927a288931.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信