使用Automapper的多对多DTO [英] Many-to-many to DTOs using Automapper

查看:292
本文介绍了使用Automapper的多对多DTO的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果我在EF中定义了多对多关系:

  public class StudentImage 
{
public int StudentId {get;组; }
public int ImageId {get;组; }
public int Order {get;组; }
public virtual Student Student {get;组; }
public virtual Image Image {get;组; }
}

public class Student
{
public int Id {get;组; }
public string Name {get;组; }
public virtual ICollection< StudentImage>图片{get;组; }
}


public class Image
{
public int Id {get;组; }
public string Filename {get;组; }
public virtual ICollection< StudentImage>学生{get;组; }
}

而DTO的:

  public class ImageDTO 
{
public int Id {get;组; }
public string Filename {get;组; }
public int Order {get;组; }
}

public class StudentIDO
{
public int Id {get;组; }
public string Name {get;组; }
public ICollection< ImageDTO>图片{get;组; }
}

如何从学生到学生DTO和从Image到MapDTO使用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)) ;

使用

  var studentDTO = Mapper.Map< StudentIDO>(student); 
var student = Mapper.Map< Student>(studentDTO);


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);

这篇关于使用Automapper的多对多DTO的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆