这是 IIS 问题还是数据库问题?非并发集合必须具有独占访问权限

这是 IIS 问题还是数据库问题?非并发集合必须具有独占访问权限

我正在将 asp.net core api 与 EF core 一起使用,今天我收到了此错误消息,它让我很困惑为什么会发生这种情况。

Operations that change non-concurrent collections must have exclusive access. A concurrent update was performed on this collection and corrupted its state. The collection's state is no longer correct.
   at System.Collections.Generic.Dictionary`2.FindEntry(TKey key)
   at System.Collections.Generic.Dictionary`2.TryGetValue(TKey key, TValue& value)
   at Mapster.TypeAdapterConfig.Remove(TypeTuple key)
   at Mapster.TypeAdapterConfig.NewConfig[TSource,TDestination]()
   at InventoryService.GetCategories(Int32 inventoryCenterId)
   at Controllers.InventoriesController.GetCategories(Int32 centerId) 

这是它所指的代码。

      TypeAdapterConfig<Category, CategoryDto>
           .NewConfig()
           .IgnoreIf((src, dest) => string.IsNullOrEmpty(src.MetaTitle), dest => dest.MetaTitle)
          .IgnoreIf((src, dest) => string.IsNullOrEmpty(src.MetaDescription), dest => dest.MetaDescription);

        var categories = dbContext.Centers.Where(x => x.Id == CenterId).SelectMany(x => x.Categories).OrderBy(x => x.Name).ToList();
        return categories.Adapt<List<CategoryDto>>();

似乎任何尝试访问该方法的人都会遇到同样的错误。我重置了 IIS,一切正常,但我正在试图弄清楚发生了什么。

不确定还要添加什么。

答案1

当多个线程修改字典时,.NetCore 会故意抛出上述消息的 InvalidOperationException。关键是使用线程安全的 ConcurrentDictionary。

请参阅GitHub 问题

相关内容