Автоматическое выравнивание с трех уровней до двух уровней

#automapper

#автоматическое выравнивание

Вопрос:

Я использую automapper v. 9, и мне нужно преобразовать 3-уровневую структуру в 2-уровневую структуру. Я уже пробовал использовать опцию IncludeMembers, но я не могу добиться желаемого результата.

Вот мои классы моделей (упрощенные)

 public partial class Mail
{
    public Mail()
    {
        Mail_Files = new HashSet<Mail_Files>();
    }

    [Key]
    public int Id { get; set; }
    public string Oggetto { get; set; }
    public string Testo { get; set; }

    [InverseProperty("IdMailNavigation")]
    public virtual ICollection<Mail_Files> Mail_Files { get; set; }
}

public partial class Mail_Files
{
    [Key]
    public int Id { get; set; }
    public int IdMail { get; set; }
    public int IdFile { get; set; }

    [ForeignKey(nameof(IdFile))]
    [InverseProperty(nameof(Files.Mail_Files))]
    public virtual Files IdFileNavigation { get; set; }
    [ForeignKey(nameof(IdMail))]
    [InverseProperty(nameof(Mail.Mail_Files))]
    public virtual Mail IdMailNavigation { get; set; }
}

public partial class Files
{
    public Files()
    {
        Mail_Files = new HashSet<Mail_Files>();
    }

    [Key]
    public int Id { get; set; }
    public int IdTipoFile { get; set; }
    public string FileName { get; set; }
    public int? FileSize { get; set; }

    [InverseProperty("IdFileNavigation")]
    public virtual ICollection<Mail_Files> Mail_Files { get; set; }
}
  

Я должен сгладить этот объект до этого:

 public class MailFileResource
{
    public int Id { get; set; }
    public string FileName { get; set; }
}

public class MailResource
{
    public int Id { get; set; }
    public string Testo { get; set; }
    public IEnumerable<MailFileResource> Files { get; set; }
}
  

Ответ №1:

Я делаю это так:

 CreateMap<Files, MailFileResource>()
    .ForMember(d => d.FileName, opt => opt.MapFrom(s => s.FileName))
    .ForMember(d => d.Id, opt => opt.MapFrom(s => s.Id));

CreateMap<Mail_Files, MailFileResource>().IncludeMembers(s => s.IdFileNavigation);

CreateMap<Mail, MailResource>()
    .ForMember(d => d.Files , opt => opt.MapFrom(s => s.Mail_Files))
    .ForMember(d => d.Protezione, opt => opt.MapFrom(s => s.Protezione));
  

Моя ошибка заключалась в том, что я также использовал IncludeMembers в сопоставлении Mail -> MailResource