C# 自动映射属性保持为空
似乎我无法使嵌套映射正常工作 读完后:应该很容易 我有以下课程:C# 自动映射属性保持为空,c#,automapper,C#,Automapper,似乎我无法使嵌套映射正常工作 读完后:应该很容易 我有以下课程: public class CatalogVehicle : VehicleBase { public string Type { get; set; } public int Year { get; set; } public VehicleSpecification VehicleSpecification { get; set; } = new VehicleSpecification(); } //r
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
CreateMap()
.FormMember(catalogVehicle=>catalogVehicle.Id,
source=>source.MapFrom(vehicleAndQuote=>vehicleAndQuote.Quote.QuotationIdentifier.Trim())
.FormMember(catalogVehicle=>catalogVehicle.Make,
source=>source.MapFrom(vehicleAndQuote=>vehicleAndQuote.Vehicle.VehicleMakeName))
.FormMember(catalogVehicle=>catalogVehicle.Model,
source=>source.MapFrom(vehicleAndQuote=>vehicleAndQuote.Vehicle.VehicleModelTypeName))
.FormMember(catalogVehicle=>catalogVehicle.VehicleSpecification,opt=>opt.Ignore())//删除了一些行
CreateMap()
.FormMember(vehicleSpecification=>vehicleSpecification.Co2,src=>src.MapFrom(vehicleAndQuote=>vehicleAndQuote.Vehicle.Co2.ToSafeInt())
.FormMember(vehicleSpecification=>vehicleSpecification.Weight,src=>src.MapFrom(vehicleAndQuote=>vehicleAndQuote.Vehicle.Weight.ToSafeInt())
.FormMember(vehicleSpecification=>vehicleSpecification.Rating,opt=>opt.Ignore())
.FormMember(vehicleSpecification=>vehicleSpecification.Tyres,opt=>opt.Ignore())//还删除了一些行
CreateMap()
.ForMember(engine=>engine.Displacement,opt=>opt.Ignore())
.ForMember(发动机=>发动机.Fuel,src=>src.MapFrom(车辆引用=>vehicleAndQuote.Vehicle.FuelType))
.ForMember(engine=>engine.Power,src=>src.ResolveUsing(GetEnginePower))
.ForMember(engine=>engine.汽缸,src=>src.MapFrom(vehicleAndQuote=>vehicleAndQuote.Vehicle.汽缸));
//等
正如您所看到的,我忽略了一些属性,因为否则我会得到未映射属性错误。在阅读本文之后,只要映射了所有类,它就应该可以工作
我调用的方法如下:
var vehicle=\u mapper.Map(vehicleAndQuote)代码>您需要为嵌套类配置映射,而不是忽略它们:
.ForMember(catalogVehicle => catalogVehicle.VehicleSpecification, src => src.MapFrom(vehicleAndQuote => vehicleAndQuote);
而不是
.ForMember(catalogVehicle => catalogVehicle.VehicleSpecification, opt => opt.Ignore());
其他映射也一样完美!我知道忽略是错误的,但我不知道应该是什么。Thnx!