Неожиданное поведение Automapper с отображением между унаследованными типами - PullRequest
2 голосов
/ 02 февраля 2012

У меня следующая ситуация (C #):

public class A: B
{
      public ComplexType MyCT {get;set;}

}

public class B: 
{
      public string MyString {get;set;}

}

У меня есть экземпляр A, и я хочу использовать Automapper для сопоставления его с экземпляром B, так как после отображения мне не нужно "MyCT "(очевидно, это урезанная версия).

B myB = Mapper.Map<A, B>(myA);

но когда я пытаюсь что-то сделать с myB (я сохраняю это в Azure, который не может обработать мой сложный тип, поэтому пытаюсьвыбросьте его, если хотите) выдается исключение, сообщающее my, что MyCT все еще висит вокруг объекта myB.

Когда я отлаживаю, я могу привести его к A и, конечно, у меня есть доступ к MyCT.

Чего не хватает, я чувствую, что я в принципе упускаю что-то здесь, по-видимому, связанное с наследованием между двумя типами.

Ответы [ 2 ]

2 голосов
/ 02 февраля 2012

Похоже, вы не определили отображение для двух типов, которое просто:

Mapper.CreateMap<A, B>();

(Если вы посмотрите на Getting Started дает некоторые советы о том, как можно централизовать эти конфигурации сопоставления в одном месте при запуске приложения.)

Похоже, что без определения сопоставления между этими двумя типами Automapper возвращается к восходящему преобразованию.вашего экземпляра A типа B.Вы действительно хотите добиться сглаживания , которое Automapper может сделать, только если ему явно известно о сопоставлении между двумя типами.

Вот пример кода, который иллюстрирует это:

using System;
using AutoMapper;

class Program
{
    static void Main(string[] args)
    {
        B b = Mapper.Map<A, B>(new A());
        Console.WriteLine(b.GetType()); //A

        Mapper.CreateMap<A, B>();       //define the mapping
        b = Mapper.Map<A, B>(new A());
        Console.WriteLine(b.GetType()); //B

        Console.ReadLine();
    }
}

public class A: B
{
}

public class B
{
}
1 голос
/ 02 февраля 2012

Добавить Mapper.CreateMap<A, B>().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...