AutoMapper-从v8升级到v9后无法使用泛型

时间:2019-10-29 10:46:21

标签: c# automapper automapper-9

在更新到版本9之前,我可能有奇怪的AutoMapper设置正在运行。

我们从数据库中获取数据,将其包装在通用对象中,然后将其映射到DTO:

myfunction <- local(function() {
return(c("weight_0", "height_0", "bmi_0"
  ))
})

这是我的修订和映射配置文件类:

        //build some models
        Domain test1 = new Domain() { Id = 1, Name = "Shaun" };
        Domain test2 = new Domain() { Id = 2, Name = "Dave" };

        //this is what I get from my API
        Revision<Domain> preMap = new Revision<Domain>() {
            RevisionNumber = 2,
            Items = new System.Collections.Generic.List<Domain> {
                test1, test2,
            }
        };

        //build mapper obj
        var config = new MapperConfiguration(cfg => {
            cfg.AddMaps(typeof(MyMaps).Assembly);
        });
        Mapper mapper = new Mapper(config);

        //map!
        var postMap = mapper.Map<Revision<DTOHistory<Dto>>>(preMap);


        Console.ReadLine();

我要么以NULL DTO结尾,要么收到类似于以下的错误消息:

public class Revision<MyItem> {
    public long RevisionNumber { get; set; }
    public List<MyItem> Items { get; set; }
}


public class MyMaps : AutoMapper.Profile {
    public MyMaps() {

        CreateAPI<Domain, Dto>();
    }

    private void CreateAPI<H, T>() {
        //I've tried fiddling with these to get a good config
        CreateMap<Revision<H>, Revision<DTOHistory<T>>>(MemberList.None);
            //.ForMember(dest => dest.Items, opt => opt.MapFrom(src => src.Items))
            //.ReverseMap();

        CreateMap<H, DTOHistory<T>>(MemberList.None);
            //.ReverseMap();
    }
}

1 个答案:

答案 0 :(得分:0)

Lucian Bargaoanu的评论显示了这个问题:

http://docs.automapper.org/en/latest/9.0-Upgrade-Guide.html

  

AutoMapper不再自动创建地图(CreateMissingTypeMaps   和约定),您需要手动明确配置地图   或使用反射。还请考虑属性映射。

要解决此问题,我需要遍历每个导航属性,并为链中的每种类型创建一个地图。