Automapper и иерархия классов - PullRequest
6 голосов
/ 10 мая 2011

С учетом следующих источников:

public class SourceBase { public string TheString { get; set; } }
public class SourceDerived : SourceBase { }

и направления:

public class DestBase { public string MyString { get; set; } }
public class DestDerived : DestBase { }

И это отображение:

  CreateMap<SourceBase, DestBase>()
    .ForMember(dest => dest.MyString, o => o.MapFrom(x => x.TheString))
    .Include<SourceDerived, DestDerived>();

  CreateMap<SourceDerived, DestDerived>();
  Mapper.AssertConfigurationIsValid();  // Exception is thrown here

Тем не менее, это приводит к ошибке сопоставления, когда MyString не сопоставляется с DestDerived. Что дает? Мне действительно нужно повторять сопоставления для свойств базового класса во всех производных типах (у меня есть более одного подкласса в моем реальном коде).

EDIT:

Точное исключение: Следующие 1 свойства в DestDerived не могут быть сопоставлены: MyString. Добавьте пользовательское выражение сопоставления, игнорируйте или переименуйте свойство в DestDerived .

1 Ответ

0 голосов
/ 10 мая 2011

Пожалуйста, проверьте этот пост: http://groups.google.com/group/automapper-users/browse_thread/thread/69ba514a521e9599

Работает нормально, если вы объявите это, как показано в коде ниже (с помощью AutoMapper 1.1.0.188). Я не уверен, решит ли это вашу проблему.

var result = Mapper.CreateMap<SourceBase, DestBase>()
                .ForMember(dest => dest.MyString, o => o.MapFrom(x => x.TheString));
               //.Include<SourceDerived, DestDerived>();
            Mapper.CreateMap<SourceDerived, DestDerived>();
            var source = new SourceDerived();
            var destDerived = new DestDerived();
            source.TheString = "teststring";
            var mapResult = Mapper.Map<SourceBase, DestBase>(source, destDerived).MyString;
            Console.WriteLine(mapResult);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...