Я прочитал много SO сообщений о пропуске не отображенных свойств, но должен быть нюанс, который я не понимаю. Я получаю несопоставленное исключение во время выполнения для свойств, которые я хочу игнорировать. То, что я делаю, является дополнительной проекцией. У меня есть большая модель чтения, которую я извлекаю из базы данных, в которой данные сглажены. Есть несколько строк, которые содержат одни и те же данные, за исключением нескольких точек данных. Вы можете думать об этом как о левом соединении.
cfg.CreateMap<Readmodel, mappedDocument>(MemberList.None)
.ForMember(dest => dest.Id, opt => opt.MapFrom(s => s.Id))
.ForAllOtherMembers(s => s.Ignore());
cfg.CreateMap<Readmodel, mappedDocumentChildObject>(MemberList.None)
.ForMember(dest => dest.Id, opt => opt.MapFrom(s => s.ChildId))
.ForMember(dest => dest.Name, opt => opt.MapFrom(s => s.ChildName))
.ForAllOtherMembers(s => s.Ignore());
Пример этих данных будет выглядеть так:
Id Name ChildId ChildName
1 Test 11 ChildA
1 Test 12 ChildB
Что я хочу сделать, так это зациклить эти строки и сначала сопоставить объект верхнего уровня с данными, кэшировать его, а затем на следующем проходе извлечь его из кэша и добавить дочерние объекты по мере их появления.
Объект может выглядеть примерно так:
public class Parent
{
public int Id { get; set; }
public string Name { get; set; }
public List<Child> Children { get; set; }
}
public class Child
{
public int Id { get; set; }
public string Name { get; set; }
}
Я не хочу явно создавать отдельные вызовы игнорирования. Я пробовал расширение (которое, я знаю, больше не работает).
Я попытался создать начальный CreateMap
, который использует ForAllMembers(s => s.Ignore())
, а затем конкретный CreateMap
, который отображает свойства, которые меня интересуют.
Я также пытался MemberList.None
, но он все еще выбрасывает во время выполнения.
Мне кажется, что я прочитал сообщения SO, сообщения GitHub и документацию, но я все еще не могу заставить это работать.
Любая помощь приветствуется.