自动映射IEnumerable <something>到IEnumerable <somethingelse>而不创建映射配置

Bjø*_*ørn 6 c# automapper-3

我无法使用以下内容,其中array是CustomerContract的数组:

Mapper.Map<IEnumerable<Customer>>(array);

Mapper.Map<IEnumerable<CustomerContract>, IEnumerable<Customer>>(array);

Mapper.Map<Array, List<Customer>>(array);
Run Code Online (Sandbox Code Playgroud)

在我看来,第一个例子应该足够了,但我无法工作.我已经阅读了automapper的配置wiki(https://github.com/AutoMapper/AutoMapper/wiki/Configuration),但我不明白为什么这是必要的.Automapper所需的一切都在命令中定义.它是哪种类型(对象和它是一个列表),以及我希望它映射到哪个对象.

我只是不了解Automapper的核心概念?

我的例外听起来像这样:

缺少类型映射配置或不支持的映射.
映射类型:\ r \nCustomerContract - > Customer\r \nStimline.Xplorer.Repository.CustomerService.CustomerContract - > Stimline.Xplorer.BusinessObjects.Customer
目标路径:List`1 [0]
源值:Stimline.Xplorer.Repository.CustomerService .CustomerContract

Swe*_*ell 15

您正在映射到IEnumerable ... Automapper可以映射到具体类型而不是接口.

首先注册映射(请参阅"缺少类型映射配置或不支持的映射")为了提高性能,必须使用CreateMap一次

Mapper.CreateMap<something, somethingelse>();
Run Code Online (Sandbox Code Playgroud)

代替:

Mapper.Map<IEnumerable<Customer>>(array);
Run Code Online (Sandbox Code Playgroud)

试试这个:

Mapper.Map<List<Customer>>(array);
Run Code Online (Sandbox Code Playgroud)

  • @Swell,我的理解是autoMapper支持所有通用集合类型。具体来说,这里是列表:IEnumerable,IEnumerable &lt;T&gt;,ICollection,ICollection &lt;T&gt;,IList,IList &lt;T&gt;,List &lt;T&gt;,数组。 (2认同)