Automapper包含父类中的所有属性



我有以下代码:

using System;
using AutoMapper;
namespace AutoMapperPlayground
{
public class Program
{
public static void Main()
{
var derived = new Derived {
Title = "a",
Base = new Base {
Id = 1,
Test = "b"
}
};

Mapper.CreateMap<Derived, DerivedDTO>();

var derivedDTO = Mapper.Map<DerivedDTO>(derived);
Console.WriteLine("{0},{1},{2}", derivedDTO.Test, derivedDTO.Id, derivedDTO.Title);         

}
}
public class Base
{
public int Id { get; set; }
public string Test {get; set; }
}
public class Derived
{

public Base Base {get; set; }
public string Title {get; set; }
}
public class BaseDTO
{
public int Id { get; set; }
public string Test {get; set; }
}
public class DerivedDTO : BaseDTO
{
public string Title {get; set; } 
}
}

输出为0,a。是否可以从Base填充idtitle属性?

示例.net fiddle

感谢

展平是AutoMapper的核心概念之一,是按惯例完成的;DTO属性名称需要以源类型中组成对象的属性名称为前缀

public class DerivedDTO
{
public int BaseId { get; set; }
public string BaseTest { get; set; }
public string Title { get; set; } 
}

但是,如果您想保留现有的结构(继承自BaseDTODerivedDTO(,则需要手动定义这些映射:

Mapper.CreateMap<Derived, DerivedDTO>()
.ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.Base.Id)),
.ForMember(dest => dest.Test, opt => opt.MapFrom(src => src.Base.Test));

或者,您可以创建一个从BaseDerivedDTO的映射,并将其包含在Derived映射中:

Mapper.CreateMap<Base, DerivedDTO>(); // Map Id and Test
Mapper.CreateMap<Derived, DerivedDTO>() // Map Title
.IncludeMembers(src => src.Base); // Reuse above mapping to include Base Id and Test

最新更新