我们可以在c#asp.net mvc应用程序中使用静态方法将DB对象设置为VIewModel对象吗

我们可以在c#asp.net mvc应用程序中使用静态方法将DB对象设置为VIewModel对象吗,c#,asp.net-mvc,entity-framework,object-object-mapping,C#,Asp.net Mvc,Entity Framework,Object Object Mapping,我在项目中使用Asp.NETMVC、C#、EF6CodeFirst。在某些方面,我需要 显示多个实体的属性,我已为此创建了ViewModel。现在,为了将ViewModel映射到模型(数据库对象),而不是使用AutoMapper(对象映射器),我正在尝试实现我自己的方法。在ViewModel类中,我创建了名为GetViewModel()的静态方法,并将对象从模型映射到视图模型。我可以那样用吗。这对性能有好处还是会产生任何问题。因为它是web应用程序 public class CustomerVi

我在项目中使用Asp.NETMVC、C#、EF6CodeFirst。在某些方面,我需要 显示多个实体的属性,我已为此创建了ViewModel。现在,为了将ViewModel映射到模型(数据库对象),而不是使用AutoMapper(对象映射器),我正在尝试实现我自己的方法。在ViewModel类中,我创建了名为GetViewModel()的静态方法,并将对象从模型映射到视图模型。我可以那样用吗。这对性能有好处还是会产生任何问题。因为它是web应用程序

public class CustomerViewModel
{       
    public int CustomerId { get; set; }    
    public string CustomerName { get; set; }    
    public string Locations{ get; set; }  

    public static CustomerViewModel GetCustomerWithFullAddress(Customer customer)
    {
        try
        {
            CustomerViewModel viewModel = new CustomerViewModel();
            viewModel.CustomerId = customer.CustomerId;
            viewModel.CustomerName = customer.CustomerName;
            foreach(Address address in customer.Addresses){ 
                viewModel.Locations = viewModel.Locations +"," + address.Country;                                                
            }
            return viewModel;
        }
        catch (Exception ex)
        {                
            throw ex;
        }
    }
}

然后在控制器中,我可以像这样访问

 Customer customer= db.Customer.Where(x => x.CustomerId == 1).FirstOrDefault();
 CustomerViewModel response = CustomerViewModel.GetViewModel(customer);

将模型映射到视图模型是一种非常好的方法。所以请继续使用它。

AutoMapper并不慢,假设映射的定义在构造函数中,这在初始化类时调用类时发生一次。
您可以尝试添加一个记录跟踪时间的秒表,以真正确定它是否“太慢”。

“它对性能有好处还是会产生任何问题”-这是基于观点的,而且范围太广。你期望什么(绩效)问题?为什么?你希望答案教会你什么?你自己研究了什么?我用过automapper。它太慢,无法映射对象。这就是我尝试这个的原因。但在将其投入生产之前,我需要确认我的实现方式。AutoMapper并不慢。您正在处理一个HTTP POST,很可能您的映射代码是整个管道中最快的代码。无论如何,我们无法为您确认这一点。您也不会直接将代码移动到生产环境中,这就是测试/验收环境的用途。