我有以下DomainObject类:
public class MyDomainObj
{
public CUSTOMER customer {get;set;} // This is database entity
public ORDER order {get;set;}
}
我的DTO如下:
public class MyDTO
{
public string custId{get;set;}
public strinf orderId{get;set;}
}
在CUSTOMER
表中,我有一个名称为customer_id
的属性
ORDER
表order_id
这是我的自动映射器配置:
m.CreateMap<CUSTOMER, MyDTO>().ForMember(d => d.custId, o => o.MapFrom(s => s.customer_id));
m.CreateMap<ORDER, MyDTO>().ForMember(d => d.orderId, o => o.MapFrom(s => s.order_id));
为了工作,我为mapper写了一个扩展方法:
public static class ExtensionAutoMapper
{
public static TDestination Map<TSource, TDestination>(this TDestination destination, TSource source)
{
return Mapper.Map(source, destination);
}
}
用法是:
var response = Mapper.Map<MyDTO>(myDomainObj.customer)
.Map(myDomainObj.order);
这很好。
问题:
遵循这些原则
var response = Mapper.Map<List<MyDomainObj>, List<MyDTO>>(myDomainObj);
编辑: 如果它们具有相同的名称,我想将数据库实体中的字段自动映射到dto属性。
@jmoerdyk提供的答案解决了我的问题。但是,采用这种方法,即使名称相同,我也必须将数据库实体的所有字段都映射到dto。
答案 0 :(得分:0)
您只需提供从MyDomainObj
到MyDto
的映射,它应该能够处理集合的映射:
Mapper.CreateMap<MyDomainObj,MyDTO>()
.ForMember(d => d.custId, o => o.MapFrom(s => s.customer.customer_id))
.ForMember(d => d.orderId, o => o.MapFrom(s => s.order.order_id));
然后像您一样调用它(假设myDomainObj
是List<MyDominObj>
):
var response = Mapper.Map<List<MyDomainObj>, List<MyDTO>>(myDomainObjList);