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

C# 一种类型的属性映射到另一种类型的实例,c#,automapper,C#,Automapper,我使用automapper来映射视图模型和实体模型,一切都很好,但现在我有了一个稍微不同的场景,automapper无法映射我的类型 我的视图模型: public class CriminalSearchViewModel { public CriminalSearchParamsViewModel SearchParameters { get; set; } public SelectList GenderSelectList { get; set; }

我使用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();
我也试过这个:

 Mapper.CreateMap<CriminalSearchParamsViewModel,CriminalSearchViewModel>()
  .ForMember(dest => dest.SearchParameters, opt =>
     opt.MapFrom(src => Mapper.Map<CriminalSearchParamsViewModel, CriminalSearch>(src)));
Mapper.CreateMap()
.ForMember(dest=>dest.SearchParameters,opt=>
opt.MapFrom(src=>Mapper.Map(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();
}
公共行动结果搜索(CriminalSearchViewModel searchVM)
{
if(ModelState.IsValid)
{
var searchParams=searchVM.SearchParameters;
var criminalSearch=AutoMapper.Mapper.Map(searchParams);
_刑事搜查罪犯(刑事搜查);
}
返回视图();
}
但它总是抛出异常:

缺少类型映射配置或不支持的映射

映射类型: 刑事搜索参数视图模型->刑事搜索 NationalCriminals.UI.ViewModels.CriminalSearchParamsViewModel->NationalCriminalCriminals.Core.Models.CriminalSearch

目标路径: 刑事搜查

源值: NationalCriminals.UI.ViewModels.CriminalSearchParamsViewModel


有人能告诉我出了什么问题吗?

您只需要更改方法
CreateMap
中泛型参数的顺序:

Mapper.CreateMap<CriminalSearchParamsViewModel,CriminalSearch>()
建议:

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