自动映射:“缺少类型映射配置或不支持的映射”

时间:2016-12-01 11:20:53

标签: c# automapper

AssertConfigurationIsValid通过,并且正在尝试的对象已完全填充,但我在第一个调用的Map请求中收到错误。

我正在尝试映射

Survey ToLoad = Mapper.Map<Survey>(U);

我正在使用以下代码初始化automapper。

//Lots of other Maps
Mapper.Initialize(cfg => cfg.CreateMap<User, SMUser>()
      .ForMember(t => t.AccountType, s => s.MapFrom(so => so.AccountType != null ? so.AccountType : String.Empty))
      .ForMember(t => t.Username, s => s.MapFrom(so => so.Username != null ? so.Username : String.Empty)));


Mapper.Initialize(cfg => cfg.CreateMap<SurveyMonkey.Containers.Survey, Survey>().ForMember(t => t.AnalyzeUrl, s => s.MapFrom(so => so.AnalyzeUrl != null ? so.AnalyzeUrl : String.Empty))
      .ForMember(t => t.Category, s => s.MapFrom(so => so.Category != null ? so.Category : String.Empty))
      .ForMember(t => t.CollectUrl, s => s.MapFrom(so => so.CollectUrl != null ? so.CollectUrl : String.Empty))
      .ForMember(t => t.EditUrl, s => s.MapFrom(so => so.EditUrl != null ? so.EditUrl : String.Empty))
      .ForMember(t => t.Language, s => s.MapFrom(so => so.Language != null ? so.Language : String.Empty))
      .ForMember(t => t.Preview, s => s.MapFrom(so => so.Preview != null ? so.Preview : String.Empty))
      .ForMember(t => t.SummaryUrl, s => s.MapFrom(so => so.SummaryUrl != null ? so.SummaryUrl : String.Empty))
      .ForMember(t => t.Title, s => s.MapFrom(so => so.Title != null ? so.Title : String.Empty)) 
      //Some more members
);

//LISTS
Mapper.Initialize(cfg => cfg.CreateMap<List<SurveyMonkey.Containers.Collector>, List<Collector>>());

//Lots of other List Maps

我正在使用Nuget(5.2.0)中最新的Stable版本。

2 个答案:

答案 0 :(得分:4)

仅使用整个配置调用Mapper.Initialize一次,否则您将覆盖它。

您可以将配置包装在继承AutoMapper.Profile

的类中
using AutoMapper;

public class MyAutoMapperProfile : Profile {

    protected override void Configure() {
        CreateMap<User, SMUser>();
        CreateMap<SurveyMonkey.Containers.Survey, Survey>();
        CreateMap<List<SurveyMonkey.Containers.Collector>, List<Collector>>();
    }
}

然后使用此配置文件初始化Mapper:

Mapper.Initialize(cfg => {
    cfg.AddProfile<MyAutoMapperProfile>();
    cfg.AddProfile<OtherAutoMapperProfile>();
});

AutoMapper Configuration

答案 1 :(得分:2)

我遇到了同样的错误,在我使用的 ConfigureServices 方法的启动类中

services.AddAutoMapper(typeof(startup)); => 启动类。

因为我的 automapper 配置文件类(从 Automapper.Propfle 继承的类,在这种情况下 public class MyAutoMapperProfile : Profile) 未阅读。

为了解决这个问题,我用 startup 替换了 MyAutoMapperProfile 类,如下所示 services.AddAutoMapper(typeof(MyAutoMapperProfile));

您可以调试并检查您的自动映射器映射类是否被命中。