2011-08-17 236 views
2

我想使用AutoMapper而不借助自定义映射。自动映射器Map.CreateMap没有自定义映射的问题

我有两个对象定义使用相同的接口

public class Order : IOrder 
... 

public class OrderViewModel : IOrder 
... 

我的Global.asax如下,看起来是这样的:后来

protected void Application_Start() 
    { 
     Mapper.CreateMap<Order, OrderViewModel>(); 
     Mapper.CreateMap<OrderViewModel, Order>(); 

     Mapper.CreateMap<IOrder, OrderViewModel>(); 
     Mapper.CreateMap<OrderViewModel, IOrder>(); 

     Mapper.CreateMap<Order, IOrder>(); 
     Mapper.CreateMap<IOrder, Order>(); 

     Mapper.CreateMap<IOrder, IOrder>();   

     ... 
    } 

,当我尝试使用此地图,我得到一个对象,但它没有任何内容。

OrderViewModel vm = new OrderViewModel(); 
vm.OrderName = "Test"; 

var dto = Mapper.Map<Order, OrderViewModel)(vm); 

dto.OrderName = empty string!?! 

更新:我使用的地图这样其实...很抱歉逆转PARAMS。总之,仍然不起作用。

var dto = Mapper.Map<OrderViewModel, Order)(vm); 
+0

OrderViewModel和Order都有一个名为OrderName的属性吗?另外,我认为你应该只需要:Mapper.CreateMap (); – Paul

+0

是的,他们都有OrderName。该接口指定了一个OrderName,所以这两个类实现了它。 – 010110110101

+0

你可以发布实际的课程吗? –

回答

0

的Mapper.Map签名

Mapper.Map<TSource, TDestination> 

当你正试图在这里有从OrderViewModel创建一个订单视图模型是源和秩序为目标,尝试更换通用参数:

var dto = Mapper.Map<OrderViewModel, Order)(vm); 
+0

,如何创建IOrder实例对不起 - 这是一个type-o。我反其道而行。 – 010110110101