自动映射器忽略嵌套的集合属性

时间:2018-07-24 11:14:13

标签: c# automapper

我有一个简单的对象:

public class Project : Entity
{
    public uint ProjectId { get; set; }
    public virtual ICollection<Cabin> Cabins { get; set; }
}

public class Cabin : Entity
{
    public IPAddress IpAddress { get; set; }
    public int Port { get; set; }
    public DateTime LastConnection { get; set; }

    public byte ConnectionStatus { get; set; }
    public byte TechnicalStatus { get; set; }

    public Project Project { get; set; }
    public int ProjectId { get; set; }
}

因此,使用自动映射器从一个映射到另一个并带有一些忽略的映射看起来像:

        var mapperConfig = new MapperConfiguration(cfg =>
        {
            cfg.CreateMap<Project, Project>()
               .ForMember(source => source.Id, opt => opt.Ignore())
               .ForMember(source => source.ProjectId, opt => opt.Ignore())
               .ForMember(source => source.Cabins, opt => opt.MapFrom(cab => cab.cabins));
        });

它的工作原理是将一个项目对象映射到另一个,并忽略id和project id并映射集合。

但是在这个级别上,是否可以设置源中的哪些属性。客舱将被忽略?

例如,我想忽略ConnectionStatus,TechnicalStatus。

1 个答案:

答案 0 :(得分:2)

您可以为Cabin实体添加配置映射,并且AutoMapper会在映射Cabin实体之前查看这些配置。

cfg.CreateMap<Cabin, Cabin>()
               .ForMember(source => source.ConnectionStatus, opt => opt.Ignore())
               .ForMember(source => source.TechnicalStatus, opt => opt.Ignore());

或者您可以使用AfterMap事件为这些属性定义默认值。

相关问题