C# 自动映射:集合已修改;枚举操作不能执行

C# 自动映射:集合已修改;枚举操作不能执行,c#,.net-core,automapper,C#,.net Core,Automapper,我使用AutoMapper将对象从数据库映射到具有相同属性的DTO。异常很少发生,映射失败 映射发生在.NET Core 2.1 MVC控制器中。这部分代码不会在多个线程中运行(除非多次调用控制器)。我尝试将映射锁定以防止线程问题,但有时仍会发生异常(大约每100次调用一次) 映射有时不起作用的原因是什么?如何重新配置映射以防止此异常? 班级 不要使用静态映射器。Automapper可以作为具有非共享作用域的服务注入。当两个控制器同时访问时,可能会在映射器中遇到某些状态 public class

我使用AutoMapper将对象从数据库映射到具有相同属性的DTO。异常很少发生,映射失败

映射发生在.NET Core 2.1 MVC控制器中。这部分代码不会在多个线程中运行(除非多次调用控制器)。我尝试将映射锁定以防止线程问题,但有时仍会发生异常(大约每100次调用一次)

映射有时不起作用的原因是什么?如何重新配置映射以防止此异常?

班级
不要使用静态映射器。Automapper可以作为具有非共享作用域的服务注入。当两个控制器同时访问时,可能会在映射器中遇到某些状态
public class HouseTemplate
{
    public long Id { get; set; }
    public string Name { get; set; }

    public ICollection<FieldTemplate> Fields { get; set; }
    //...
}
public class HouseObject
{   
    public long Id { get; set; }
    public long Number { get; set; }
   
    public long HouseTemplateId { get; set; }
    public HouseTemplate HouseTemplate { get; set; }
    //...

}
public class FieldTemplate
{
    public long Id { get; set; }
    public string Name { get; set; } 
    
    public int Order { get; set; }
          
    public long HouseTemplateId { get; set; }
    public HouseTemplate HouseTemplate { get; set; }
    //...
}
var config = new MapperConfiguration(cfg =>
{       
    cfg.CreateMap<FieldTemplate, FieldTemplateDto>();
    cfg.CreateMap<HouseObject, HouseObjectDto>();
    cfg.CreateMap<HouseTemplate, HouseTemplateDto>();       

});
ToDtoMapper = config.CreateMapper();
HouseObjectDto dtoHouseObj = null;
lock (houseObj) {
    dtoHouseObj = HouseObjectMapper.ToDtoMapper.Map<HouseObject, HouseObjectDto>(houseObj);
}
AutoMapper.AutoMapperMappingException: Error mapping types.

Mapping types:
HouseObject -> HouseObjectDto
Project.BL.Models.HouseObject -> Project.DTO.Models.HouseObjectDto

Type Map configuration:
HouseObject -> HouseObjectDto
Project.BL.Models.HouseObject -> Project.DTO.Models.HouseObjectDto

Property:
HouseTemplate ---> AutoMapper.AutoMapperMappingException: Error mapping types.

Mapping types:
HouseTemplate -> HouseTemplateDto
Project.BL.Models.HouseTemplate -> Project.DTO.Models.HouseTemplateDto

Type Map configuration:
HouseTemplate -> HouseTemplateDto
Project.BL.Models.HouseTemplate -> Project.DTO.Models.HouseTemplateDto

Property:
Fields ---> System.InvalidOperationException: Collection was modified; enumeration operation may not execute.
    at System.Collections.Generic.List`1.Enumerator.MoveNextRare()
    at System.Collections.Generic.List`1.Enumerator.MoveNext()
    at lambda_method(Closure , HouseObject , HouseObjectDto , ResolutionContext )
    --- End of inner exception stack trace ---
    at lambda_method(Closure , HouseObject , HouseObjectDto , ResolutionContext )
    --- End of inner exception stack trace ---
    at lambda_method(Closure , HouseObject , HouseObjectDto , ResolutionContext )
    at AutoMapper.Mapper.AutoMapper.IMapper.Map[TSource,TDestination](TSource source)
    at Project.API.WebApi.Controllers.HouseObjectController.Get(String id) in C:\Project\Project.API.WebApi\Controllers\HouseObjectController.cs:line 615
    at Microsoft.AspNetCore.Mvc.Internal.ActionMethodExecutor.TaskOfIActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
    at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeActionMethodAsync()
    at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeNextActionFilterAsync()
    at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ActionExecutedContext context)
    at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
    at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeInnerFilterAsync()
    at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextExceptionFilterAsync()