If I have a many-to-many relationship defined in EF:
public class StudentImage 
{
    public int StudentId { get; set; }
    public int ImageId { get; set; }
    public int Order { get; set; }
    public virtual Student Student { get; set; }
    public virtual Image Image { get; set; }
}
public class Student
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<StudentImage> Images { get; set; }
}
public class Image
{
    public int Id { get; set; }
    public string Filename { get; set; }
    public virtual ICollection<StudentImage> Students { get; set; }
}
And the DTO's:
 public class ImageDTO
    {
        public int Id { get; set; }
        public string Filename { get; set; }
        public int Order { get; set; }
    }
    public class StudentIDO
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public ICollection<ImageDTO> Images { get; set; }
    }
How could I map from Student to StudentDTO and from Image to ImageDTO using Automapper?
Mappings
Mapper.CreateMap<Student, StudentIDO>();
Mapper.CreateMap<StudentImage, ImageDTO>()
        .ForMember(d => d.Id, opt => opt.MapFrom(s => s.ImageId))
        .ForMember(d => d.Filename, opt => opt.MapFrom(s => s.Image.Filename));
Mapper.CreateMap<StudentIDO, Student>()
      .AfterMap((s, d) =>
      {
          foreach (var studentImage in d.Images)
              studentImage.StudentId = s.Id;
      });
Mapper.CreateMap<ImageDTO, StudentImage>()
      .ForMember(d => d.ImageId, opt => opt.MapFrom(s => s.Id));
Usage
var studentDTO = Mapper.Map<StudentIDO>(student);
var student = Mapper.Map<Student>(studentDTO);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With