簡體   English   中英

Automapper-將復雜對象列表映射到屬性列表

[英]Automapper - map list of complex object to list of properties

我有以下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,即使它們具有相同的名稱。

您只需提供從MyDomainObjMyDto的映射,它就能夠處理映射集合:

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

然后像調用它一樣調用它(假定myDomainObjList<MyDominObj> ):

var response = Mapper.Map<List<MyDomainObj>, List<MyDTO>>(myDomainObjList);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM