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); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |