Madhurima
Madhurima

Reputation: 13

Is there a way to do the mapping using Automapper

The TeacherSubjects list in TeacherVM always shows null even though Automapper is used to map SubjectVM to TeacherSubject.

I have tried the code below with the automapper configuration. SchoolName is pulling through but TeacherSubjectlist is always null.

public class Teacher 
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string PhoneNumber { get; set; }
    public string Address { get; set; }
    public School WorkingSchool { get; set; }
    public int SchoolId { get; set; }
    public List<TeacherSubject> TeacherSubjectslist { get; set; }
}

public class TeacherSubject
{
    public int TeacherSubjectId { get; set; }
    public Subject Subject { get; set; }
    public int SubjectId { get; set; }
    public Teacher Teacher { get; set; }
    public int TeacherId { get; set; }
}

public class TeacherVM
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string PhoneNumber { get; set; }
    public string Address { get; set; }        
    public int SchoolId { get; set; }
    public string SchoolName { get; set; }
    public List<SubjectVM> TeacherSubjects { get; set; } 
}

public class SubjectVM
{
    public string SubjectName { get; set; }
    public int SubjectId { get; set; }
}


CreateMap<domain.TeacherSubject, SubjectVM>()
        .ForMember(dest => dest.SubjectName, opt => opt.MapFrom(src => 
src.Subject.SubjectName))
        .ForMember(dest => dest.SubjectId, opt => opt.MapFrom(src => 
src.Subject.SubjectId));
        CreateMap<domain.Teacher, TeacherVM>()
            .ForMember(dest => dest.SchoolName, opt => opt.MapFrom(src => 
src.WorkingSchool.SchoolName))
            .ForMember(dest => dest.TeacherSubjects, opt => opt.MapFrom(src 
=> src.TeacherSubjectslist));

TeacherSubjectlist should be a list of the SubjectId and the SubjectName properties.

Upvotes: 1

Views: 59

Answers (1)

Maytham Fahmi
Maytham Fahmi

Reputation: 33387

The problem is that you are missing creating instance of list types inside each class that contains list of objects.

What you need to do is add instance of list type in class constructor.

With out testing it, for example:

public Teacher() 
{
    TeacherSubjectslist = new List<TeacherSubject>();
..
..

The same concept is valid for the remaining classes that have list of objects.

Upvotes: 2

Related Questions