示例程式碼:

public List<OrderLineDTO> GetLinesForOrder(int orderId)
{
Mapper.CreateMap<OrderLine, OrderLineDTO>()
.ForMember(dto => dto.Item, conf => conf.MapFrom(ol => ol.Item.Name)
.ForMember(dto => dto.Name, opt => opt.ResolveUsing<NameCustomResolver>()); using (var context = new orderEntities())
{
return context.OrderLines.Where(ol => ol.OrderId == orderId)
.Project().To<OrderLineDTO>().ToList();
}
}
public class NameCustomResolver : ValueResolver<OrderLine, string>
{
protected override string ResolveCore(OrderLine source)
{
//可以加一些邏輯
return source.Name;
}
}

按照上面程式碼編寫會丟擲異常,使用 ORM 獲取轉換的時候(.Project().To),是不支援 ResolveUsing 的,Jimmy Bogard(AutoMapper 作者)應該擴充套件下 Queryable Extensions,如果不使用 .Project().To,單純的對映轉換是支援 ResolveUsing 的,使用 ResolveUsing 無非就是方便業務邏輯程式碼編寫,我們也可以使用 MapFrom 進行實現:

public List<OrderLineDTO> GetLinesForOrder(int orderId)
{
Mapper.CreateMap<OrderLine, OrderLineDTO>()
.ForMember(dto => dto.Item, conf => conf.MapFrom(ol => ol.Item.Name)
.ForMember(dto => dto.Name, opt => opt.MapFrom(ol => NameCustomResolver(ol))); using (var context = new orderEntities())
{
return context.OrderLines.Where(ol => ol.OrderId == orderId)
.Project().To<OrderLineDTO>().ToList();
}
}
public static string NameCustomResolver(OrderLine source)
{
//可以加一些邏輯
return source.Name;
}

參考資料: