Я бы хотел проигнорировать определенные свойства при сопоставлении глубоких (т.е. уровней> 1) объектных моделей.
Следующий тест работает нормально:
class Foo
{
public string Text { get; set; }
}
class Bar
{
public string Text { get; set; }
}
Mapper.CreateMap<Foo, Bar>()
.ForMember(x => x.Text, opts => opts.Ignore());
var foo = new Foo { Text = "foo" };
var bar = new Bar { Text = "bar" };
Mapper.Map(foo, bar);
Assert.AreEqual("bar", bar.Text);
Однако когда я пытаюсь выполнить такое же сопоставление, но имею Foo и Bar как свойства родительского класса следующий тест не проходит:
class ParentFoo
{
public Foo Child { get; set; }
}
class ParentBar
{
public Bar Child { get; set; }
}
Mapper.CreateMap<ParentFoo, ParentBar>();
Mapper.CreateMap<Foo, Bar>()
.ForMember(x => x.Text, opts => opts.Ignore());
var parentFoo = new ParentFoo
{
Child = new Foo { Text = "foo" }
};
var parentBar = new ParentBar
{
Child = new Bar { Text = "bar" }
};
Mapper.Map(parentFoo, parentBar);
Assert.AreEqual("bar", parentBar.Child.Text);
Вместо игнорирования текста дочернего класса (т. Е. Оставил его как «bar») автоподатчик устанавливает значение null. Что я делаю не так с моей конфигурацией сопоставления?