首页 > 解决方案 > 自动映射器映射属性保持为空

问题描述

似乎我无法让嵌套映射正常工作

阅读后:http ://docs.automapper.org/en/stable/Nested-mappings.html应该很容易。

我有以下课程:

public class CatalogVehicle : VehicleBase
{
    public string Type { get; set; }
    public int Year { get; set; }
    public VehicleSpecification VehicleSpecification { get; set; } = new VehicleSpecification();
} //removed some properties for readability

public class VehicleSpecification
{
    public Engine Engine { get; set; } = new Engine();
    public Transmission Transmission { get; set; } = new Transmission();
    public int Co2 { get; set; }
    public int Weight { get; set; }
} //again removed some more properties (all classes)

映射:

CreateMap<VehicleAndQuote, CatalogVehicle>()
    .ForMember(catalogVehicle => catalogVehicle.Id,
        source => source.MapFrom(vehicleAndQuote => vehicleAndQuote.Quote.QuotationIdentifier.Trim()))
    .ForMember(catalogVehicle => catalogVehicle.Make,
        source => source.MapFrom(vehicleAndQuote => vehicleAndQuote.Vehicle.VehicleMakeName))
    .ForMember(catalogVehicle => catalogVehicle.Model,
        source => source.MapFrom(vehicleAndQuote => vehicleAndQuote.Vehicle.VehicleModelTypeName))
    .ForMember(catalogVehicle => catalogVehicle.VehicleSpecification, opt => opt.Ignore()); //removed some lines

CreateMap<VehicleAndQuote, VehicleSpecification>()
    .ForMember(vehicleSpecification => vehicleSpecification.Co2, src => src.MapFrom(vehicleAndQuote => vehicleAndQuote.Vehicle.Co2.ToSafeInt()))
    .ForMember(vehicleSpecification => vehicleSpecification.Weight, src => src.MapFrom(vehicleAndQuote => vehicleAndQuote.Vehicle.Weight.ToSafeInt()))
    .ForMember(vehicleSpecification => vehicleSpecification.Rating, opt => opt.Ignore())
    .ForMember(vehicleSpecification => vehicleSpecification.Tyres, opt => opt.Ignore()) //removed some lines as well

CreateMap<VehicleAndQuote, Engine>()
    .ForMember(engine => engine.Displacement, opt => opt.Ignore())
    .ForMember(engine => engine.Fuel, src => src.MapFrom(vehicleAndQuote => vehicleAndQuote.Vehicle.FuelType))
    .ForMember(engine => engine.Power, src => src.ResolveUsing(GetEnginePower))
    .ForMember(engine => engine.Cylinders, src => src.MapFrom(vehicleAndQuote => vehicleAndQuote.Vehicle.Cylinders));

//etc

如您所见,我忽略了某些属性,否则我会收到未映射的属性错误。阅读文章后,它应该可以工作,只要您映射了所有类。

我正在调用这样的方法:var vehicle = _mapper.Map<VehicleAndQuote, CatalogVehicle>(vehicleAndQuote);<=这是包含所有信息的大类

所以从映射VehicleAndQuoteCatalogVehicle-first 几个属性可以正常工作,但是映射到VehicleSpecification我的问题。那一个不会被正确填充......

有人看到问题了吗?

标签: c#automapper

解决方案


您需要为嵌套类配置映射而不是忽略它们:

.ForMember(catalogVehicle => catalogVehicle.VehicleSpecification, src => src.MapFrom(vehicleAndQuote => vehicleAndQuote);

代替

.ForMember(catalogVehicle => catalogVehicle.VehicleSpecification, opt => opt.Ignore());

其他映射也是如此


推荐阅读