AutoMapper:最大图形深度

时间:2014-07-20 18:03:41

标签: c# automapper-3

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

国家/地区 - >地区 - >市政 - >街

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

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

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

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

2 个答案:

答案 0 :(得分:5)

是的,您可以定义地图特定的MaxDepth,如:

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

更多信息: https://github.com/AutoMapper/AutoMapper/wiki

答案 1 :(得分:0)

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

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);
}