1

我有以下与列表相关的实体:

国家 -> 地区 -> 自治市 -> 街道

当我将 Country 对象映射到我的 DTO 时,AutoMapper 会自动投影我的整个图形,一直到 Streets,这是一个很好的默认设置。在特定用例中,我只想映射根对象(国家)及其直接子对象(区域)。然后,这些地区应该有一个空的市镇列表(或为空)。

实现此目的的一种方法是创建这样的地图:

Mapper.CreateMap<Data.Country, Dto.Country>();
Mapper.CreateMap<Data.Region, Dto.Region>()
  .ForMember(dest => dest.Municipalities, opt => opt.Ignore())

这意味着在将 Region 投影为根对象时,将忽略其市镇列表。解决方法是为每个可能的根对象创建单独的 ConfigurationStore 对象,但这会导致很多不同的 ConfigurationStore。有没有办法告诉 AutoMapper 只映射到对象图中的某个深度?

4

2 回答 2

6

是的,您可以像这样定义特定的地图MaxDepth

Mapper.CreateMap<Source, Destination>().MaxDepth(1);

更多信息: https ://docs.automapper.org/en/stable/Attribute-mapping.html?highlight=maxdepth

于 2015-03-12T12:30:27.727 回答
3

要为所有映射项设置最大深度:

Mapper.Initialize(cfg =>
{
     cfg.ForAllMaps((typeMap, mappingExpression) => mappingExpression.MaxDepth(1));
}

或者

Mapper.Initialize(cfg =>
{
     cfg.ForAllMaps(SetMaxDepth);
}

private static void SetMaxDepth(TypeMap typeMap, IMappingExpression expression)
{
     expression.MaxDepth(1);
}
于 2018-12-12T22:19:21.530 回答