【发布时间】:2019-03-30 12:47:26
【问题描述】:
我有以下 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);
这很好用。
问题:
- 如何更改映射配置以将域对象列表映射到 dto 列表?
类似的东西
var response = Mapper.Map<List<MyDomainObj>, List<MyDTO>>(myDomainObj);
编辑: 如果它们具有相同的名称,我想自动将数据库实体中的字段映射到 dto 属性。
@jmoerdyk 提供的答案,解决我的问题。但是,在这种方法中,我必须将数据库实体的所有字段都映射到 dto,即使它们具有相同的名称。
【问题讨论】:
-
如果名称匹配,您可以使用this扩展名进行展平。
标签: c# automapper