2016-06-08 7 views
3

Учитывая следующий код ниже, почему я все время получаю исключение на этапе отображения? Разве 2 DTO действительно отличаются? Вот строка кода с сервера pdb символов, который бросает исключение.Почему карта AutoMapper не будет правильно настроена?

throw new AutoMapperMappingException(context, "Missing type map configuration or unsupported mapping."); 

Что действительно убивает меня является то, что @jbogard сделал убийственную работу по обработке исключений и приборы с относительно AutoMapper, существует множество контекстных данных для объектов как источника и назначения, а также состояние картографа когда возникает исключение .. и я до сих пор не могу понять это.

void Main() 
{ 
    var config = new MapperConfiguration(cfg => 
    { 
     cfg.ShouldMapProperty = p => p.GetMethod.IsPublic || p.GetMethod.IsVirtual; 
     cfg.CreateMap<Customer, Customer2>() 
     .ReverseMap(); 
    }); 

    config.AssertConfigurationIsValid(); 

    Customer request = new Customer 
    { 
     FirstName = "Hello", LastName = "World" 
    }; 
    request.FullName = request.FirstName + " " + request.LastName; 

    Customer2 entity = Mapper.Map<Customer, Customer2>(request); 


    Console.WriteLine("finished"); 
} 



public class Customer 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string FullName { get; set; } 
} 

[Serializable()] 
public partial class Customer2 
{ 
    private string _firstName; 
    private string _lastName; 
    private string _fullName; 

    public virtual string FirstName 
    { 
     get 
     { 
      return this._firstName; 
     } 
     set 
     { 
      this._firstName = value; 
     } 
    } 
    public virtual string LastName 
    { 
     get 
     { 
      return this._lastName; 
     } 
     set 
     { 
      this._lastName = value; 
     } 
    } 
    public virtual string FullName 
    { 
     get 
     { 
      return this._fullName; 
     } 
     set 
     { 
      this._fullName = value; 
     } 
    } 
} 

Спасибо, Стивена

+0

Какова информация об исключении? – lzcd

+0

'Customer2' отмечен' partial', где находится остальная часть класса? –

ответ

8

После извлечения источника и добавления проекта AutoMapper.Net4 на консоль я был в состоянии диагностировать проблему.

API появился, когда Джимми удалил статическую версию, а затем повторно добавил ее обратно через меня с охраны, синтаксис теперь немного отличается от нового API. Ниже приведено исключение, когда источник был добавлен, обратите внимание на разницу между этим и тем, что было первоначально выбрано через Nuget?

throw new InvalidOperationException("Mapper not initialized. Call Initialize with appropriate configuration."); 

Это привело меня обратно к Getting Started Docs на GitHub, где вскоре я обнаружил, что я не инициализирован картографа, как так

var mapper = config.CreateMapper(); 

то вместо статического Mapper

Cutomer2 entity = Mapper.Map<Customer, Cutomer2>(request); 

вы используете интерфейс IMapper сверху так

Cutomer2 entity = mapper.Map<Customer, Cutomer2>(request); 

Проблема решена. Надеюсь, что это поможет

+2

Вы также можете использовать Mapper.Initialize, если вы хотите использовать статический класс Mapper. –