如何根据模型名称将模型转换为其视图模型

How to convert a model to it's viewmodel based on model name

我正在尝试弄清楚一些我不确定是否可行的事情。我的目标是我有一个名为 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;
}

所以目标是能够传入任何视图模型并找出相关模型的属性(普通模型具有哪些属性)并根据viewmodel/model对它分配这些值是。这可能令人困惑,如果您需要更多说明,请告诉我。

类似于:

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

模型是与发送的视图模型相关的模型。

您不可能创建一个非泛型扩展方法来处理从所有领域模型到视图模型的转换,反之亦然。相反,如上面的评论所述,您想要的是随时告诉您哪个视图模型对应于哪个模型和地图,而完美的库是 AutoMapper.

首先声明一张地图:

Mapper.CreateMap<Order, OrderDto>();

然后你得到它的映射:

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

您对此也有很大的控制权