2016-04-06 51 views
0

我正在使用AutoMapper 4.2.1.0,我已經按照以下方式定義了我的地圖。Automapper無法正常工作

var config = new MapperConfiguration(cfg => 
     { 
      cfg.CreateMap<Order, OrderDTO>(); 
      cfg.CreateMap<Order_Detail, Order_DetailDTO>(); 
     }); 
MapperConfig = config; 

然後我用MapperConfig在我的代碼做到這一點:

var builder = MapperConfig.ExpressionBuilder; 
return ((IQueryable<TEntity>) property.GetValue(_db, null)).ProjectTo<TDto>(builder); 

但當TEntityOrderTDtoOrderDto我得到的是說,一個例外:

缺少地圖從訂單到訂單DTO。創建使用 Mapper.CreateMap

我做錯了什麼?

回答

1

好的。我已經得到了它: 相反的:

return ((IQueryable<TEntity>) property.GetValue(_db, null)).ProjectTo<TDto>(builder); 

我應該寫:

return ((IQueryable<TEntity>) property.GetValue(_db, null)).ProjectTo<TDto>(MapperConfig); 

傳遞的配置對象本身成爲ProjectTo。

0

您需要使用MapperConfiguration對象創建映射器。

var config = new MapperConfiguration(cfg => 
{ 
    cfg.CreateMap<Order, OrderDTO>(); 
    cfg.CreateMap<Order_Detail, Order_DetailDTO>(); 
}); 

// Make sure mappings are properly configured (you can try-catch this). 
config.AssertConfigurationIsValid(); 

// Create a mapper to use for auto mapping. 
var mapper = config.CreateMapper(); 

var orderObject = new Order { /* stuff */ }; 
var orderDto = mapper.Map<OrderDTO>(orderObject); 
+0

我想使用'ProjectTo',所以我必須使用ExpressionBuilder,就像它在本文中提到的一樣:https://lostechies.com/jimmybogard/2016/01/21/removing-the-static-api-from- automapper / – Beatles1692