2015-04-22 103 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); 

您還可以在這個