Sha*_*ean 65 asp.net-mvc automapper
我有课:
public class Person{ /* Props here */ }
public class PersonViewModel { /* Props here */ }
Run Code Online (Sandbox Code Playgroud)
然后是清单:
List<Person> people = new List<Person>();
List<PersonViewModel> peopleVM = Mapper
.MapList<Person, PersonViewModel>(people); //Problem here.
Run Code Online (Sandbox Code Playgroud)
这样做的正确方法是什么?
Der*_*tie 75
Mapper.CreateMap<Person, PersonViewModel>();
peopleVM = Mapper.Map<List<Person>, List<PersonViewModel>>(people);
Mapper.AssertConfigurationIsValid();
Run Code Online (Sandbox Code Playgroud)
从入门
我如何使用AutoMapper?首先,您需要使用源和目标类型.目标类型的设计可能受其所在层的影响,但只要成员的名称与源类型的成员匹配,AutoMapper就能发挥最佳效果.如果您有一个名为"FirstName"的源成员,则会自动将其映射到名为"FirstName"的目标成员.AutoMapper还支持Flattening,它可以摆脱您在此过程中可能遇到的所有那些讨厌的空引用异常.
获得类型和AutoMapper参考后,您可以为这两种类型创建地图.
Mapper.CreateMap<Order, OrderDto>();
Run Code Online (Sandbox Code Playgroud)
左侧的类型是源类型,右侧的类型是目标类型.要执行映射,请使用Map方法.
OrderDto dto = Mapper.Map<Order, OrderDto>(order);
Run Code Online (Sandbox Code Playgroud)
Ram*_*Ram 19
另一种方案
List<Person> people = new List<Person>();
List<PersonViewModel> peopelVM;
peopelVM = people.Select(Mapper.Map<Person, PersonViewModel>);
Run Code Online (Sandbox Code Playgroud)
并在Automapper配置中
Mapper.CreateMap<Person, PersonViewModel>();
Run Code Online (Sandbox Code Playgroud)
Jer*_*rph 14
如果您在此处使用IQueryable列表(例如,来自EF或NH),您可以使用AutoMapper.IQueryableExtensions方法,Project()和To().
这是我第一次使用AutoMapper,但我成功地为模型创建了一个地图:
Mapper.CreateMap<Person, PersonViewModel>();
Mapper.AssertConfigurationIsValid();
Run Code Online (Sandbox Code Playgroud)
然后使用IQueryableExtension方法Project()和To():
using AutoMapper.QueryableExtensions;
...
IQueryable<Person> people = new List<Person>().AsQueryable(); //actually from ORM
IQueryable<PersonViewModel> peopleVM = people.Project().To<PersonViewModel>();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
78138 次 |
最近记录: |