加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 是否有将模型转换为视图模型的快捷方式?

发布时间:2020-12-15 23:33:06 所属栏目:百科 来源:网络整理
导读:我是c#和.NET的新手.我正在学习ASP.NET MVC 5.我发现自己花了额外的时间将模型转换为viewmodel. 这是我的模特 public class Overview{ public string chain_name { get; set; } public int store_id { get; set; } public int total_attempts { get; set; }
我是c#和.NET的新手.我正在学习ASP.NET MVC 5.我发现自己花了额外的时间将模型转换为viewmodel.

这是我的模特

public class Overview
{

    public string chain_name { get; set; }
    public int store_id { get; set; }
    public int total_attempts { get; set; }
    public int total_unique_number_called { get; set;  }
    public int total_callable { get; set; }
    public int total_completed_interviews { get; set; }

}

这是我的视图模型

public class OverviewViewModel
{

    public string chain_name { get; set; }
    public int store_id { get; set; }
    public int total_attempts { get; set; }
    public int total_unique_number_called { get; set; }
    public int total_callable { get; set; }
    public int total_completed_interviews { get; set; }
    public decimal? unique_number_per_complete { get; set; }

    public OverviewViewModel()
    {
        unique_number_per_complete = 0;
    }

}

正如您所看到的,除了作为计算的over变量之外,Model和ViewModel都是相同的.

要填充我的视图模型,请执行以下操作

var records = conn.Database.SqlQuery<Overview>(query).ToList();

var overView = new List<OverviewViewModel>();

foreach(var record in records){

    var newRecord = new OverviewViewModel();

    newRecord.store_id = record.store_id;

    newRecord.chain_name = record.chain_name;

    newRecord.total_attempts = record.total_attempts;

    newRecord.total_callable = record.total_callable;

    newRecord.total_completed_interviews = record.total_completed_interviews;

    if (record.total_completed_interviews > 0) {
        newRecord.total_unique_number_called = record.total_unique_number_called / record.total_completed_interviews;
    }

    overView.Add(newRecord);
}

我用我的方法看到的两个问题是

>我必须做很多额外的编码,尤其是视图模型很大或者我有多个需要计算的变量.
>我觉得我正在循环一次额外的时间将我的模型转换为查看模式.

在c#中有更简单的方法吗?

对于大型应用程序,此程序是否有更好的方法?我的目标是学习更充分地利用我的代码时间的方法.

解决方法

是的,您应该使用Automapper,安装包视图Nuget. Automapper也是非常可配置的.

http://automapper.org/

首先,创建这个类:

public static class AutoMapperConfig
{
    public static void RegisterMappings()
    {
        //Example here,creates "two way" for Overview & OverviewViewModel mapping
        Mapper.CreateMap<Overview,OverviewViewModel>(); //<source,destination>
        Mapper.CreateMap<OverviewViewModel,Overview>(); //<source,destination>
        //..more mapping for other Models and ViewModels.
    }
}

在Global.asax.ApplicationStart()中添加以下行:

AutoMapperConfig.RegisterMappings()

现在你评论中的foreach示例很简单:

foreach (var record in records)
{
    var newRecordOverviewViewModel = Mapper.Map<OverviewViewModel>(record); //<destination>(source)
    overView.Add(newRecordOverviewViewModel);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读