Collection was modified; enumeration operation may not exec 返回

SqlSugar
6 146

之前出现过类似的情况 是我使用了集合进行查询导致。现在 没有使用集合也出现了这个情况,求助~


RefAsync<int> totalCount = 0;

            var data = await _normalDB.Db.Queryable<sys_menu>()

               .WhereIF(!string.IsNullOrEmpty(searchModel.SearchText), x => x.MenuCode.Contains(searchModel.SearchText) || x.MenuName.Contains(searchModel.SearchText))

                .OrderBy(x => x.UpdatedOn, OrderByType.Desc)

                .ToPageListAsync(searchModel.CurnentPage, searchModel.PageSize, totalCount);


System.InvalidOperationException: Collection was modified; enumeration operation may not execute.

   at System.Collections.Generic.List`1.Enumerator.MoveNextRare()

   at SqlSugar.SqlSugarClient.InitConfigs(List`1 configs)

   at SqlSugar.SqlSugarClient..ctor(List`1 configs)

   at SqlSugar.SqlSugarScope.GetAsyncContext(String key)

   at SqlSugar.SqlSugarScope.GetContext()

   at SqlSugar.SqlSugarScope.get_ScopedContext()

   at SqlSugar.SqlSugarScope.GetConnection(Object configId)

……

热忱回答6

  • fate sta fate sta VIP0
    2021/11/15

    Config外部被修改了

    0 回复
  • fate sta fate sta VIP0
    2021/11/15

    (List`1 configs

    0 回复
  • @fate sta:请问这里的Config 会在哪里被修改 不是很清楚  感谢~

    0 回复
  • fate sta fate sta VIP0
    2021/11/15

    @骑驴打枪:那你看代码,我这边看不到

    0 回复
  • fate sta fate sta VIP0
    2021/11/15

    比如:

    new SqlSugarcope(new List<config>)  这种直接写在SqlSugar中的配置文件是安全的


    下面写法就可能有X被修改的情况

    public List<config>x=new List<config>

    new SqlSugarcope(x)

    0 回复
  • @fate sta:我是这样写的  


     var listConfig = new List<ConnectionConfig>();

                services.AddSingleton<ISqlSugarClient>(o =>

                {

                    foreach (var item in AppsettingConfig.DBConfigList)

                    {

                        var db = DBConfig.GetDBConnection(item);

                        if (db != null)

                        {

                            listConfig.Add(new ConnectionConfig

                            {

                                ConfigId = db.DBId,

                                ConnectionString = db.ConnectionString,

                                DbType = DbType.MySql,

                                InitKeyType = InitKeyType.SystemTable,

                                IsAutoCloseConnection = true,

                               

                                //IsShardSameThread = true,

                                MoreSettings = new ConnMoreSettings

                                {

                                    //IsAutoRemoveDataCache = true,

                                    IsWithNoLockQuery = true,

                                },

                                AopEvents = new AopEvents

                                {

                                    OnLogExecuting = (sql, pars) =>

                                    {

                                        //MiniProfiler.Current.CustomTiming("SQL:", GetParas(pars) + "[SQL语句]:" + sql);

                                        if (db.IsLogSQL)

                                        {

                                            log.Info(GetParas(pars) + "[SQL语句]:" + sql);

                                        }

                                        Console.WriteLine(GetParas(pars) + "[SQL语句]:" + sql);

                                        Console.WriteLine();

                                    }

                                }

                            });

                        }

                    }


                    return new SqlSugarScope(listConfig);

                });

    那应该就是你说的问题 我修改下 试试  多谢哈

    0 回复