Как использовать AutoMapper? - PullRequest
6 голосов
/ 27 апреля 2010

Впервые использую AutoMapper, и мне трудно понять, как его использовать. Я пытаюсь сопоставить ViewModel с моими таблицами базы данных.

Моя ViewModel выглядит так ...

public class AddressEditViewModel
{
    public AddressEdit GetOneAddressByDistrictGuid { get; private set; }
    public IEnumerable<ZipCodeFind> GetZipCodes { get; private set; }

    public AddressEditViewModel(AddressEdit editAddress, IEnumerable<ZipCodeFind> Zips)
    {
        this.GetOneAddressByDistrictGuid = editAddress;
        this.GetZipCodes = Zips;
    }
}   

Картография, которую я пытаюсь использовать ...

CreateMap<Address, AddressEditViewModel>();  

Когда я запускаю этот тест ...

public void Should_map_dtos()
{
    AutoMapperConfiguration.Configure();
    Mapper.AssertConfigurationIsValid();
}  

Я получаю эту ошибку ...

AutoMapper.AutoMapperConfigurationException: следующие 2 свойства для JCIMS_MVC2.DomainModel.ViewModels.AddressEditViewModel не отображаются: GetOneAddressByDistrictGuid GetZipCodes Добавьте пользовательское выражение сопоставления, игнорируйте или переименуйте свойство в JCIMS_MVC2.DomainModel.Address.

Я не уверен, как я должен отобразить эти 2 свойства. Буду признателен за любое направление. Спасибо

Mark

1 Ответ

6 голосов
/ 02 июня 2011

Хорошо, я вижу несколько вещей, которые вы делаете, которые, вероятно, не помогут.

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

  1. Свойства называются «Get ...», что для меня больше похоже на метод.
  2. Установщики ваших свойств являются частными, поэтому AutoSetter не сможет их найти. Измените их на минимальные внутренние.
  3. Использование параметризованного конструктора больше не требуется при использовании AutoMapper - поскольку вы конвертируете напрямую из одного объекта в другой. Параметризованный конструктор предназначен для того, чтобы показать, что явно требуется для этого объекта.

    CreateMap<Address, AddressEditViewModel>()
             .ForMember( x => x.GetOneAddressByDistrictGuid , 
                              o => o.MapFrom( m => m."GetOneAddressByDistrictGuid") )
             .ForMember( x => x.GetZipCodes, 
                              o => o.MapFrom( m => m."GetZipCodes" ) );
    

Для чего действительно хорош Automapper - это копирование из DataObjects в объекты POCO или объекты View Model.

    public class AddressViewModel
    {
              public string FullAddress{get;set;}
    }

    public class Address
    {
              public string Street{get;set;}
              public string Suburb{get;set;}        
              public string City{get;set;}
    }

    CreateMap<Address, AddressViewModel>()
             .ForMember( x => x.FullAddress, 
                              o => o.MapFrom( m => String.Format("{0},{1},{2}"), m.Street, m.Suburb, m.City  ) );

    Address address = new Address(){
        Street = "My Street";
        Suburb= "My Suburb";
        City= "My City";
    };

    AddressViewModel addressViewModel = Mapper.Map(address, Address, AddressViewModel); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...