Вы не можете сделать это, я не думаю - вам нужно составить сопоставления.На самом деле это может быть ошибкой, так как вики заявляют, что это возможно, однако приведенный пример просто полагается на имя свойств для сопоставления, а не на бит включения.По крайней мере, я так понимаю.
Если вы посмотрите на http://automapper.codeplex.com/wikipage?title=Lists%20and%20Arrays и измените имя свойств в Source и Dest (я делаю их Value 3 и Value4, чтобы действительно смешивать вещи), затем явно добавьте свои сопоставления.
Mapper.CreateMap<ChildSource, ChildDestination>()
.ForMember( x => x.Value4, o => o.MapFrom( y => y.Value2 ) );
Mapper.CreateMap<ParentSource, ParentDestination>()
.Include<ChildSource, ChildDestination>()
.ForMember( x => x.Value3, o => o.MapFrom( y => y.Value1 ) );
Тогда, похоже, произойдет сбой.
ChildSource s = new ChildSource()
{
Value2 = 1,
Value1 = 3
};
var c = s.MapTo<ChildDestination>();
var c2 = s.MapTo<ParentDestination>();
Assert.AreEqual( c.Value3, s.Value1 );
Assert.AreEqual( c.Value4, s.Value2 );
Assert.AreEqual( c2.Value3, s.Value1 );
Assert.AreEqual( c.Value4, s.Value2 );
Другие примечания
Кроме того, в поле «Включить» должен быть ребенок, а не родитель,Прототип на самом деле утверждает, что
public IMappingExpression<TSource, TDestination> Include<TOtherSource, TOtherDestination>()
where TOtherSource : TSource
where TOtherDestination : TDestination
Из того, что я прочитал, вы должны сначала создать свое дочернее отображение, хотя, возможно, это была старая проблема.
Mapper.CreateMap<ChildSource, ChildDest>();
Затем ваш родитель
Mapper.CreateMap<ParentSource, Parent Dest>()
.Include<ChildSource, ChildDest>();
Источник http://automapper.codeplex.com/wikipage?title=Lists%20and%20Arrays