Ответ 1
Вы можете сделать это, предоставив значение во время выполнения, на которое был дан ответ: Как игнорировать свойство на основе условия выполнения?.
Конфигурация:
Mapper.CreateMap<Foo, FooDTO>().ForMember(e => e.Bars,
o => o.Condition(c => !c.Options.Items.ContainsKey("IgnoreBars")));
Применение:
Mapper.Map<FooDTO>(foo, opts => { opts.Items["IgnoreBars"] = true; });
Такой же подход к настройке, который вы можете применить для всех ваших вложенных объектов, которые вы называете уровнями.
Если вы хотите достичь такого же поведения для своих сущностей DB, вы можете использовать подход ExplicitExpansion
, как описано в этом ответе: Можно ли сказать automapper игнорировать отображение во время выполнения?.
Конфигурация:
Mapper.CreateMap<Foo, FooDTO>()
.ForMember(e => e.Bars, o => o.ExplicitExpansion());
Применение:
dbContext.Foos.Project().To<FooDTO>(membersToExpand: d => d.Bars);