resolutioncontext - La expresión de Automapper debe resolverse para el miembro de nivel superior
automapper resolveusing (4)
Defina mapeo entre
Source
yOutputData
.Mapper.CreateMap<Source, OutputData>();
Actualice su configuración para asignar
Destination.Output
conOutputData
.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.