MVC-ViewModel + Automapper:如果我想使用它,如何使用Automapper查看我的代码?

时间:2012-02-23 11:51:08

标签: asp.net-mvc asp.net-mvc-3 entity-framework mvvm automapper

我首先使用MVC-Viewmodel和EF模型作为我的项目

这些是我用于索引视图的Viewmodels:

public class IndexViewModel
{
    public List<QuestionViewModel> Questionlist { get; set; }
}

&安培;

   public class QuestionViewModel
    {
       public string QuestionText { get; set; }
       public List<string> CoreValues { get; set; }
       public List<string> SubjectTypes { get; set; }
       public int QID { get; set; }

   }
}

这是我的控制器操作:

public ActionResult Index()
    {
       List<Question> ListQuestions = Arep.getallquestion();
       var model = new IndexViewModel();
       model.Questionlist = new List<QuestionViewModel>();
       foreach (var item in ListQuestions)
       {
           var QuestionViewModel = new QuestionViewModel();
           model.Questionlist.Add(QuestionViewModel);
           QuestionViewModel.QuestionText = item.QuestionText;
           QuestionViewModel.QID = item.QID;
           QuestionViewModel.CoreValues = new List<string>();
           foreach (var Corevalue in item.CoreValue)
           {
               QuestionViewModel.CoreValues.Add(Corevalue.Cname);   
           }
           QuestionViewModel.SubjectTypes = new List<string>();
           foreach (var SubjectType in item.SubjectType)
           {
               QuestionViewModel.SubjectTypes.Add(SubjectType.Sname);
           }
       }

        return View(model);
    }

我的视图用户界面显示的是Questions.QuestionTextCoreValue.CnameSubjectType.Sname相关的列表。问题可以有许多CoreValues和SubjectType。

我想知道这段代码如何使用Automapper,我会很感激!

提前致谢!

祝你好运!

1 个答案:

答案 0 :(得分:2)

未经测试,但是:

首先,你有CreateMap部分(通常是global.asax.cs中的部分)

Mapper.CreateMap<Question, QuestionViewModel>()
.ForMember(m => m.CoreValues, opt => opt.MapFrom(s => s.CoreValue.Select(x => x.Cname)))
.ForMember(m => m.SubjectTypes, opt => opt.MapFrom(s => s.SubjectType.Select(x => x.Sname)))

然后在你的控制器中,

var model = new IndexViewModel();
model.Questionlist = Mapper.Map(Arep.getallquestions(), new List<QuestionViewModel>());
return View(model);

顺便说一下,控制器的代码(没有自动播放器)可以通过简单的linq查询更加简洁!