2015-04-22 94 views
0

我想弄清楚我不确定是否有可能。我的目标是我有一个名为convertToPersonModel的扩展方法,它将我的PersonViewModel复制到PersonModel。是否有可能我可以更改参数来接受任何ViewModel并将其转换为正常模型。例如,我可以通过EmployeeViewModel将其转换为EmployeeModel或RoleViewModel到一个方法中的RoleModel。如何将模型转换为基于模型名称的视图模型

这是我的扩展方法:

public static PersonModel ConvertToPersonModel(this PersonViewModel viewModel) 
{ 

    var model = new Product(){ 
     FirstName = viewModel.FirstName; 
     LastName = viewModel.LastName; 
    } 
    return model; 
} 

所以目标是能在任何视图模型传递,并找出相关模型的性能(正常模式有哪些属性),并分配这些值取决于它是哪个视图模型/模型对。这可能令人困惑,请告诉我,如果您需要更多的澄清。

出头喜欢:

public static Model ConvertToModel(this ViewModel viewModel) 
{ 
    var model = new findWhichModelisRelatesToViewModel(){ 
     1stproperty = viewModel.relevantProperty; 
     2ndproperty = viewModel.relevantProperty; 
    } 
    return model; 
} 

随着模型是相关于在视图模型的发送模型。

+5

太多的控制,您可以使用这样的AutoMapper关于这个问题,避免重新发明车轮。 – David

+2

查看[automapper](https://github.com/AutoMapper/AutoMapper)等工具, –

回答

1

您不可能创建一个非泛型扩展方法来处理从所有域模型到视图模型的转换,反之亦然。相反,上面评论中所说的就是告诉哪一个视图模型对应于你想要的模型和地图,并且这个完美的地图是AutoMapper

首先声明一个地图:

Mapper.CreateMap<Order, OrderDto>(); 

然后你把它映射:

OrderDto dto = Mapper.Map<OrderDto>(order); 

您还可以在这个