AutoMapper:最大图形深度



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

国家->地区->直辖市->街道

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

实现这一点的一种方法是创建一个像这样的映射:
Mapper.CreateMap<Data.Country, Dto.Country>();
Mapper.CreateMap<Data.Region, Dto.Region>()
  .ForMember(dest => dest.Municipalities, opt => opt.Ignore())

这意味着当将Region投影为根对象时,它的Municipalities列表将被忽略。解决这个问题的一种方法是为每个可能的根对象创建单独的ConfigurationStore对象,但这将导致大量不同的ConfigurationStore。有没有办法告诉AutoMapper只映射到对象图中的某个深度?

是的,您可以像这样定义特定于map的MaxDepth:

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新