MVC-ViewModel + Automapper. Как будет выглядеть использование Automapper для моего кода, если я захочу его использовать? - PullRequest
0 голосов
/ 23 февраля 2012

Сначала я использую модель 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.QuestionText, которые связаны с CoreValue.Cname и SubjectType.Sname.Вопрос может иметь много CoreValues ​​и SubjectType.

Я хотел бы знать, как этот код будет выглядеть с использованием Automapper, я был бы очень признателен за это!

Заранее спасибо!

С наилучшими пожеланиями!

1 Ответ

2 голосов
/ 23 февраля 2012

Не проверено, но:

Во-первых, у вас есть часть 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!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...