首页 > 解决方案 > 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 和项目 id 以及地图集合。

但是在那个级别上,是否可以设置 source.Cabins 中的哪些属性会被忽略?

例如,我想忽略 ConnectionStatus、TechnicalStatus。

标签: c#automapper

解决方案


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

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

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


推荐阅读