Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# AutoMapper-从v8升级到v9后不使用泛型_C#_Automapper_Automapper 9 - Fatal编程技术网

C# AutoMapper-从v8升级到v9后不使用泛型

C# AutoMapper-从v8升级到v9后不使用泛型,c#,automapper,automapper-9,C#,Automapper,Automapper 9,我可能有一些奇怪的AutoMapper设置,在我们升级到版本9之前就已经运行了 我们从数据库中获取数据,将其包装在通用对象中,然后将其映射到DTO: //build some models Domain test1 = new Domain() { Id = 1, Name = "Shaun" }; Domain test2 = new Domain() { Id = 2, Name = "Dave" }; //this is w

我可能有一些奇怪的AutoMapper设置,在我们升级到版本9之前就已经运行了

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

        //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();

Lucian Bargaoanu的评论表明了这个问题:

自动映射不再自动创建映射(CreateMissingTypeMaps 和约定)您将需要手动显式配置映射 或者使用反射。还考虑属性映射。


要修复此问题,我需要检查每个导航属性,并为链中的每种类型创建一个映射。

查看
exception.ToString()
,以了解潜在错误。公平!我实际上错过了AutoMapper以前免费提供的底层地图!谢谢:)AutoMapper 8似乎深入研究了导航属性并为它们生成了映射,在AutoMapper 9中,您似乎需要像这样显式映射链/图中的每个复杂类型。看,我认为他们需要像ManuelMapper这样的改名,而不是Automapper哈!这是一次旅程!平心而论,我们现在使用的是AutoMapper 10,这些天我的代码非常简单:
cfg.CreateMap().ReverseMap()
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();
    }
}

Mapping types:
Revision`1 -> Revision`1
AutoMapperTest.Revision`1[[AutoMapperTest.Domain, AutoMapperTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] -> AutoMapperTest.Revision`1[[AutoMapperTest.DTOHistory`1[[AutoMapperTest.Dto, AutoMapperTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], AutoMapperTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]```