自动映射 - 将一种类型映射到另一种类型时出现问题

问题描述 投票:1回答:1

我的项目编译并运行 - 在运行时不会从一种类型映射到另一种类型。所有代码和错误消息如下所示。有没有人对此有任何想法/意见?提前致谢!

我的startup.cs中有以下代码(配置方法): -

Mapper.Initialize(config =>
{
    config.CreateMap<VehicleViewModel, Vehicle>().ReverseMap();
});

在我的脑海中创建了VehicleViewModel和Vehicle之间的双向映射。

VehicleViewMOdel的代码如下: -

public class VehicleViewModel
{
    //Fuel Economy is in L/Km
    public float CityFuelEconomy {get;set;}
    public float HighwayFuelEconomy {get;set;}
    public float ListPrice {get;set;}
    public float SoldPrice{get;set;}
    [Required]
    public int ModelForeignKey {get;set;}
    [Required]
    public int DealerForeignKey{get;set;}
    public string Notes{get; set;}
    public string Color{get; set;}
}

为完整起见,车辆代码如下: -

public class Vehicle
{
    [Key]
    public int Id {get; set;}
    //Fuel Economy is in L/Km
    public float CityFuelEconomy {get;set;}
    public float HighwayFuelEconomy {get;set;}
    public float ListPrice {get;set;}
    public float SoldPrice{get;set;}
    [ForeignKey("VehicleModelId")]
    public virtual VehicleModels ModelForeignKey {get;set;}
    [ForeignKey("VehicleDealerId")]
    public virtual Dealer DealerForeignKey{get;set;}
    public string Notes{get; set;}
    public string Color{get; set;}
}

执行映射时,我看到以下消息: -

找到了未映射的成员。查看下面的类型和成员。添加自定义映射表达式,忽略,添加自定义解析程序或修改源/目标类型对于无匹配的构造函数,添加无参数ctor,添加可选参数或映射所有构造函数参数

编辑 - 根据Hien Nguyen的有用建议,我使用ForMember映射不同类型的成员: -

Mapper.Initialize(config =>
        {
            config.CreateMap<VehicleViewModel, Vehicle>()
            .ForMember(dest => dest.DealerForeignKey, opt => opt.MapFrom<DealerResolver>())
            .ForMember(dest => dest.ModelForeignKey, opt => opt.MapFrom<VehicleModelResolver>()).ReverseMap();
        });

这将使用我的解析器从视图模型中获取相关的Id并检索模型所需的正确对象。以下是在DealerResolver中执行业务的代码: -

public Dealer Resolve(VehicleViewModel source, Vehicle destination, Dealer destMember, ResolutionContext context)
    {
        List<Dealer> dealers = _vehicleRepo.GetDealerById(source.DealerForeignKey).ToList();
        return dealers.FirstOrDefault();
    }

我对VehicleModelResolver使用了一个非常相似的想法。

到现在为止还挺好。

唯一的问题是,当我运行代码并尝试进行映射时,我现在看到一个不同的错误消息: -

AutoMapper.dll中发生类型'AutoMapper.AutoMapperMappingException'的异常最内层异常System.MissingMethodException:没有为此对象定义无参数构造函数

你知道造成这种情况的原因吗?我真的觉得使用'ForMember'的原始建议是正确的方法,并认为我们几乎可以解决这个问题。

c# visual-studio-code automapper
1个回答
0
投票

您的模型和视图模型具有不同类型的属性。您可以使用ForMember在属性之间自定义映射。

请参阅此选项以获取自定义映射属性How to handle custom Properties in AutoMapper

© www.soinside.com 2019 - 2024. All rights reserved.