文章出處
文章列表
示例代碼:
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;
}
參考資料:
文章列表
全站熱搜