resolveusing resolutioncontext formember createmissingtypemaps automapper .net automapper-2

resolutioncontext - La expresión de Automapper debe resolverse para el miembro de nivel superior



automapper resolveusing (4)

  1. Defina mapeo entre Source y OutputData .

    Mapper.CreateMap<Source, OutputData>();

  2. Actualice su configuración para asignar Destination.Output con OutputData .

    Mapper.CreateMap<Source, Destination>().ForMember( dest => dest.Output, input => input.MapFrom(s=>Mapper.Map<Source, OutputData>(s)));

Estoy usando automapper para mapear objetos de origen y destino. Mientras los mapeo me sale el siguiente error.

Expresión debe resolver a miembro de nivel superior. Nombre del parámetro: lambdaExpression

No puedo resolver el problema.

Mis objetos de origen y destino son:

public partial class Source { private Car[] cars; public Car[] Cars { get { return this.cars; } set { this.cars = value; } } } public partial class Destination { private OutputData output; public OutputData Output { get { return this.output; } set { this.output= value; } } } public class OutputData { private List<Cars> cars; public Car[] Cars { get { return this.cars; } set { this.cars = value; } } }

Tengo que asignar Source.Cars con el objeto Destination.OutputData.Cars . ¿Podría por favor ayudarme en esto?


La respuesta correcta dada por allrameest en esta pregunta debería ayudar: AutoMapper - Mapeo profundo de nivel

Esto es lo que necesitas:

Mapper.CreateMap<Source, Destination>() .ForMember(dest => dest.OutputData, opt => opt.MapFrom(i => i)); Mapper.CreateMap<Source, OutputData>() .ForMember(dest => dest.Cars, opt => opt.MapFrom(i => i.Cars));

Cuando use el mapeador, use:

var destinationObj = Mapper.Map<Source, Destination>(sourceObj)

donde destinationObj es una instancia de Destino y sourceObj es una instancia de Source.

NOTA: Debe intentar dejar de usar Mapper.CreateMap en este punto, está obsoleto y no será compatible pronto.


Puedes hacerlo de esa manera:

// First: create mapping for the subtypes Mapper.CreateMap<Source, OutputData>(); // Then: create the main mapping Mapper.CreateMap<Source, Destination>(). // chose the destination-property and map the source itself ForMember(dest => dest.Output, x => x.MapFrom(src => src));

Esa es mi manera de hacer eso ;-)


Tu estas usando :

Mapper.CreateMap<Source, Destination>() .ForMember( dest => dest.OutputData.Cars, input => input.MapFrom(i => i.Cars));

Esto no funcionará porque estás usando 2 niveles en dest lambda.

Con Automapper, solo puedes mapear a 1 nivel. Para solucionar el problema necesitas usar un solo nivel:

Mapper.CreateMap<Source, Destination>() .ForMember( dest => dest.OutputData, input => input.MapFrom(i => new OutputData{Cars=i.Cars}));

De esta manera, puede configurar sus coches al destino.