自动映射未映射的成员被发现 - 即使在我映射了这些成员之后

时间:2018-03-15 17:33:18

标签: c# automapper

我已经浏览了网页,我无法弄清楚为什么在Automapper 6.2.1中我遇到了这些问题。我have查看了through多个tutorialsguidesanswers并且没有任何结果。

我收到此错误:

  

找到未映射的成员。查看以下类型和成员。

  未映射的属性:
  标题
  字幕
  ProductType
  语言
  描述

但是我已经为这些属性创建了映射。我不知道为什么我会遇到这个问题。

我创建了一个AutoMapperConfig类,其设置如下:

public class AutoMapperConfig
    {
        public static void Initialize()
        {
            Mapper.Initialize(cfg =>
            {
                cfg.CreateMap<Shop, SearchViewModel>()
                    .ForMember(x => x.Title, opts => opts.MapFrom(x => x.TITLE))
                    .ForMember(x => x.Subtitle, opts => opts.MapFrom(x => x.SUB_TITLE))
                    .ForMember(x => x.ProductType, opts => opts.MapFrom(x => x.PRODUCT_TYPE))
                    .ForMember(x => x.Language, opts => opts.MapFrom(x => x.PRODUCT_LANGUAGE))
                    .ForMember(x => x.Description, opts => opts.MapFrom(x => x.BRIEF_DESC));  
            });
        }

然后在Global.asax方法的Application_Start()中我有这一行:

AutoMapperConfig.Initialize();

我试图在我的控制器中使用这个:

var searchResults = Mapper.Map<List<Shop>, SearchViewModel>(shopList);

在我点击该行之后会抛出该异常。我不确定为什么,因为我为所有这些属性创建了地图。

2 个答案:

答案 0 :(得分:2)

这就是我在我的一个项目中设置AutoMapper的方法(根据您的示例量身定制)。我在同一个类中使用静态类和静态IMapper属性。

    public static class AutoMapperConfig
    {
        public static IMapper EntityMapper { get; set; }

        static EntityMap()
        {
            EntityMapper = new MapperConfiguration(cfg =>
            {
                cfg.CreateMap<Shop, SearchViewModel>()
                    .ForMember(x => x.Title, opts => opts.MapFrom(x => x.TITLE))
                    .ForMember(x => x.Subtitle, opts => opts.MapFrom(x => x.SUB_TITLE))
                    .ForMember(x => x.ProductType, opts => opts.MapFrom(x => x.PRODUCT_TYPE))
                    .ForMember(x => x.Language, opts => opts.MapFrom(x => x.PRODUCT_LANGUAGE))
                    .ForMember(x => x.Description, opts => opts.MapFrom(x => x.BRIEF_DESC));
            });
        }
    }

您可以这样称呼它:

    EntityMap.EntityMapper.Map<List<Shop>, SearchViewModel>(shopList);

答案 1 :(得分:1)

searchResults的数据类型错误。

为避免将来出现此错误,请使用显式数据类型声明变量。以下内容永远不会编译:

List<SearchViewModel> searchResults = Mapper.Map<List<Shop>, SearchViewModel>(shopList);    

请改为尝试:

List<SearchViewModel> searchResults = Mapper.Map<List<Shop>, List<SearchViewModel>>(shopList);