Automapper игнорирует игнорирование свойств

Я бы хотел проигнорировать определенные свойства при сопоставлении глубоких (т.е. уровней> 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. Что я делаю не так с моей конфигурацией сопоставления?

8
задан Brownie 23 March 2011 в 22:20
поделиться