Как настроить Automapper.Collections, чтобы игнорировать свойство источника для обновленных элементов, но перезаписывать для добавленных элементов? - PullRequest
0 голосов
/ 22 мая 2019

Я использую AutoMapper.Collections для сопоставления исходного набора элементов с целью.

Если у меня есть классы

public class Foo
{
  public List<Bar> Bars;
}

public class Bar
{
  public string NaturalKey { get; set;}
  public Guid Id { get; protected set; } = Guid.NewGuid();
}

и я использую конфигурацию сопоставления, подобную этой:

var config  = new MapperConfiguration(cfg =>
{
    cfg.AddCollectionMappers();
    cfg.CreateMap<Foo, Foo>();
    cfg.CreateMap<Bar, Bar>().EqualityComparison((x, y) => x.NaturalKey ==  y.NaturalKey);
});
var mapper = config.CreateMapper();

При отображении я хотел бы, чтобы исходная коллекция сохраняла свое исходное свойство Id для обновленных элементов, но для добавленных элементов из цели поддерживала свойство Id цели.

var fooA = new Foo { Bars = new List<Bar> { new Bar { NaturalKey = "1", new Bar { NaturalKey = "2" } } } };
var fooB = new Foo { Bars = new List<Bar> { new Bar { NaturalKey = "2", new Bar { NaturalKey = "3" } } } };
var bar2Id = fooA.Bars[1].Id;
var bar3Id = fooB.Bars[1].Id;
mapper.Map(fooB, fooA);
// How to achieve below?
// Assert.That(fooA.Bars[0].Id, Is.EqualTo(bar2Id));
// Assert.That(fooA.Bars[1].Id, Is.EqualTo(bar3Id));

Я играл с Ignore и GlobalIgnore и не могу найти решение, в котором я могу сохранить значение свойства источника для обновленных элементов, но использовать значение свойства цели для добавленных элементов.

Как мне этого добиться?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...