remarks cref c# asp.net automapper

c# - cref - Mapeador automático Se encontraron miembros no asignados



remarks c# (1)

Este problema ocurre cuando intentas mapear un objeto para el que no creaste una configuración de mapeo. Lo que debe tener en cuenta es que no tiene que ser el objeto específico que está tratando de asignar; pero una de sus propiedades de navegación.

Digamos, por ejemplo, que tiene un Car.cs que desea asignar a un CarDTO.cs

El Car.cs ve así:

public class Car { public string Color { get; set; } public Engine Engine { get; set; } }

Y su DTO se ve igual, pero tiene una referencia al EngineDTO en EngineDTO lugar:

public class CarDTO { public string Color { get; set; } public EngineDTO Engine { get; set; } }

Configuraste el mapeo de esta manera:

Mapper.CreateMap<DTO.CarDTO, Data.Model.Car>(); Mapper.CreateMap<Data.Model.Car, DTO.CarDTO>(); Mapper.CreateMap<DTO.EngineDTO, Data.Model.Engine>(); Mapper.CreateMap<Data.Model.Engine, DTO.EngineDTO>();

Todo se ve bien, ¿verdad? Sin embargo, en su EngineDTO , probablemente tenga una propiedad de navegación como, digamos:

public class EngineDTO { public List<PartDTO> Parts { get; set; } }

Entonces, mientras Automapper está asignando de Engine a EngineDTO , también intenta PartDTO el PartDTO , pero como se olvidó de declarar el mapeo en global.asax , global.asax el error:

AutoMapper.AutoMapperConfigurationException: Se encontraron miembros no asignados. Revise los tipos y miembros a continuación. Agregue una expresión de mapeo personalizada, ignore, agregue una resolución personalizada o modifique el tipo de origen / destino

Si no desea asignar ciertas propiedades en una clase, puede usar Ignorar:

Mapper.CreateMap<Engine, EngineDTO>() .ForMember(x => x.Parts, opt => opt.Ignore());

EDITAR:

Para una configuración de AutoMapper más robusta, sugiero que use perfiles de mapeo, en lugar de declarar el mapeo directamente en Global.asax . Aquí hay un ejemplo:

Perfil:

public class CarProfile : Profile { public CarProfile () { CreateMap<Car, CarDTO>(); } }

Global.asax:

Mapper.Initialize(cfg => { cfg.AddProfile<CarProfile>(); }

Estamos utilizando Automapper para un proyecto y parece que obtenemos el siguiente error de forma aleatoria:

AutoMapper.AutoMapperConfigurationException: Se encontraron miembros no asignados. Revise los tipos y miembros a continuación. Agregue una expresión de mapeo personalizada, ignore, agregue una resolución personalizada o modifique el tipo de origen / destino

El código no ha sido cambiado en meses. Recibo ese error, actualizo y el error desaparece y la página funciona bien. Estoy usando

Mapper.AssertConfigurationIsValid();

no estoy seguro de por qué se quejan de que las asignaciones no son buenas y luego una actualización y está bien de nuevo, ¿alguien se ha topado con esto? La depuración no ayuda, ya que es aleatoria, a veces no hay errores y otros días se abrirá en algún lugar del sitio, volverá a ella y está bien. El error también aparece en páginas aleatorias, no en la misma página, no en la misma asignación.