Я использую 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
и не могу найти решение, в котором я могу сохранить значение свойства источника для обновленных элементов, но использовать значение свойства цели для добавленных элементов.
Как мне этого добиться?