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