属性 一种类型映射到另一种类型的实例

Property of one type map to another type of instance

我正在使用 automapper 相互映射视图模型和实体模型,一切都很好,但现在我遇到了一些不同的情况,AutoMapper 无法映射我的类型。

我的视图模型:

   public class CriminalSearchViewModel
   {

    public CriminalSearchParamsViewModel SearchParameters { get; set; }

    public SelectList GenderSelectList { get; set; }

    public SelectList NationalitySelectList { get; set; }

    public SelectList CrimeSelectList { get; set; }

    public SelectList CriminalStatusSelectList { get; set; }
}

第二个视图模型:

public class CriminalSearchParamsViewModel
{
    [Required]
    public string FirstName { get; set; }

    public string LastName { get; set; }

    public int? GenderID { get; set; }

    public int? StatusID { get; set; }

    public string CNIC { get; set; }

    public int? AgeFrom { get; set; }

    public int? AgeTo { get; set; }

    public double? Height { get; set; }

    public int Weight { get; set; }

    public int? NationalityID { get; set; }
}

我的商业模式:

public class CriminalSearch
{

    public string FirstName { get; set; }

    public string LastName { get; set; }

    public int? GenderID { get; set; }

    public int? StatusID { get; set; }

    public string CNIC { get; set; }

    public int? AgeFrom { get; set; }

    public int? AgeTo { get; set; }

    public double? Height { get; set; }

    public int Weight { get; set; }

    public int? NationalityID { get; set; }

}

我定义的映射如下:

Mapper.CreateMap<CriminalSearch, CriminalSearchParamsViewModel>();

也试过这个:

 Mapper.CreateMap<CriminalSearchParamsViewModel,CriminalSearchViewModel>()
  .ForMember(dest => dest.SearchParameters, opt =>
     opt.MapFrom(src => Mapper.Map<CriminalSearchParamsViewModel, CriminalSearch>(src)));

在控制器中我正在尝试:

public ActionResult Search(CriminalSearchViewModel searchVM)
{
    if (ModelState.IsValid)
    {
        var searchParams = searchVM.SearchParameters;
        var criminalSearch = AutoMapper.Mapper.Map<CriminalSearch>(searchParams);
        _criminalService.SearchCriminals(criminalSearch);
    }
        return View();
}

但它总是抛出异常:

Missing type map configuration or unsupported mapping.

Mapping types: CriminalSearchParamsViewModel -> CriminalSearch NationalCriminals.UI.ViewModels.CriminalSearchParamsViewModel -> NationalCriminals.Core.Models.CriminalSearch

Destination path: CriminalSearch

Source value: NationalCriminals.UI.ViewModels.CriminalSearchParamsViewModel

谁能告诉我哪里出了问题?

您只需更改方法中通用参数的顺序 CreateMap

Mapper.CreateMap<CriminalSearchParamsViewModel,CriminalSearch>()

那是因为第一个通用 arg 是 Source 类型,第二个是 Destination,这不是双向的,你必须如果您想从一种类型映射到另一种类型,则声明两者,反之亦然:

Mapper.CreateMap<CriminalSearchParamsViewModel,CriminalSearch>()
Mapper.CreateMap<CriminalSearch,CriminalSearchParamsViewModel>()

方法CreateMap是这样描述的:

AutoMapper.Mapper.CreateMap<SourceClass, DestinationClass>();

Suggest: Using AutoMapper: Creating Mappings