2013-11-19 2 views
1

У меня есть StudentClassViewModel, который выглядит вроде как это:Automapper - Карта несколько таблиц в один ViewModel

public int StudentId { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string SchoolName { get; set; } 

    public int ClassId { get; set; } 
    public string ClassName{ get; set; } 
    public string ClassSubject { get; set; } 

Первые 4 свойств являются из Студенческой таблицы, а последний 3 является из класса таблицы. Я сопоставляю с AutoMapper, и я надеюсь узнать, как отобразить из ViewModel в обе таблицы, поскольку теория заключается в том, что VM возвращает данные из представления в контроллер, где я хочу отобразить из виртуальной машины в 2 отдельных таблицы для сохранения.

Я имею в виду, он должен находиться в конфигурационном «CreateMap», что-то вроде:

 Mapper.CreateMap<StudentClassViewModel, Student>() 
      .ForMember(x => x.ClassId, y => y.Some how map to the Class table) 
      .ForMember(x => x.ClassName, y => y.Some how map to the Class table) 
      .ForMember(x => x.ClassSubject, y => y.Some how map to the Class table)); 

Также возможно я полностью пропустил точку автоматического отображения, в любом случае, дайте мне знать.

+0

В чем заключаются отношения между учеником и классом. Похоже на многих, поэтому как вы решаете, какой класс для модели просмотра? –

+0

Да, это много для многих, поэтому мне нужно немного его перестроить. Ответ Груба Банни дал мне то, что мне нужно для продолжения. Спасибо вам всем. – BattlFrog

ответ

3

Если у вас есть контроль над объектами назначения, то вы могли бы добавьте свойство класса к классу Student и дайте AutoMapper обрабатывать отображение для вас:

public class StudentClassViewModel 
{ 
    public int StudentId { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string SchoolName { get; set; } 

    public int ClassId { get; set; } 
    public string ClassName { get; set; } 
    public string ClassSubject { get; set; } 
} 

public class Class 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Subject { get; set; } 
} 

public class Student 
{ 
    public int StudentId { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string SchoolName { get; set; } 

    public Class Class { get; set; } 
} 

Mapper.CreateMap<StudentClassViewModel, Student>(); 

var student = AutoMapper.Mapper.Map<StudentClassViewModel>(viewModel); 
0

Если эти две таблицы полностью разделены, то нет простого способа. Однако, если существует связь между Студентом и классом, как студент посещает класс:

public class Class 
{ 
    public long Id {get; set;} 
    public string Name {get; set;} 
    public string Subject {get; set;} 
} 

public class Student 
{ 
    public string FullName {get; set;} 
    public Class Class {get; set;} 
} 

Вы можете просто карту как:

Mapper.CreateMap<StudentClassViewModel, Student>() 
    .ForMember(x => x.ClassId, y => y.Student.Class.Id) 
    .ForMember(x => x.ClassName, y => y.Student.Class.Name) 
    .ForMember(x => x.ClassSubject, y => y.Student.Class.Subject)); 
Смежные вопросы