Umbraco V7:通过ContentTypeService删除Vorto属性时遇集合修改错误
解决Umbraco V7批量删除Vorto属性时的“Collection was modified”错误
你遇到的错误根源是:直接枚举了PropertyTypes集合的查询结果,在循环过程中删除集合内元素时,会导致原集合的枚举器失效,触发该异常。
修复方式很直接:把查询到的Vorto属性转换成独立的内存列表,让循环操作的是原集合的副本,就不会干扰枚举过程了。
修改后的代码如下:
var contentTypes = _contentTypeService.GetAllContentTypes(); foreach (var cts in contentTypes.Where(x => x.Id != 10546)) { // 将查询结果转为List,避免枚举原集合时修改集合 var vortoPropsToDelete = cts.PropertyTypes.Where(x => x.PropertyEditorAlias == "Our.Umbraco.Vorto").ToList(); foreach (var vortoProp in vortoPropsToDelete) { cts.RemovePropertyType(vortoProp.Alias); } _contentTypeService.Save(cts); }
核心改动就是在Where查询后追加.ToList(),把延迟加载的枚举结果转换成内存中的静态列表,后续删除原PropertyTypes集合元素时,就不会影响当前的循环枚举了。
内容的提问来源于stack exchange,提问作者Dave0504
相关产品推荐
相关产品推荐

