2010-04-26 12 views
5

La prima volta che utilizzo AutoMapper e ho difficoltà a capire come usarlo. Sto provando a mappare un ViewModel alle mie tabelle del database.Come usare AutoMapper?

mio ViewModel si presenta così ...

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; 
    } 
} 

la mappatura che sto cercando di usare è ...

CreateMap<Address, AddressEditViewModel>(); 

Quando ho eseguito questo test ...

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

Viene visualizzato questo errore ...

AutoMapper.AutoMapperConfigurationException: Le seguenti 2 immobili in JCIMS_MVC2.DomainModel.ViewModels.AddressEditViewModel non sono mappati: GetOneAddressByDistrictGuid GetZipCodes aggiungere un'espressione di mappatura personalizzata, ignorare, o rinominare la proprietà su JCIMS_MVC2.DomainModel.Address.

Non sono sicuro di come dovrei mappare queste 2 proprietà. Gradirei qualsiasi direzione. Grazie

Mark

+0

Si prega di taggare con il linguaggio di programmazione. – doublep

+0

Un paio di cose. In primo luogo, AutoMapper si aspetta che i criminali no-arg abbiano il tipo di destinazione. Quindi, puoi pubblicare l'indirizzo? –

+0

Indirizza una classe generata automaticamente da LINQ a SQL creata quando ho abbandonato la tabella sul designer ... È una classe piuttosto grande ... quanto ne vuole vedere? -MARK- –

risposta

6

Ok così posso vedere alcune cose che si sta facendo che probabilmente non sarà di aiuto.

In primo luogo, questo AutoMapper viene utilizzato per copiare le proprietà in un oggetto in Proprietà in un oggetto diff. Lungo il percorso potrebbe interrogarli o manipolarli per ottenere il modello di risultato finale nello stato corretto.

  1. Le proprietà sono denominate "Get ...", che suona più come un metodo per me.
  2. I setter delle proprietà sono privati, quindi AutoSetter non sarà in grado di trovarli. Cambia questi al minimo interno.
  3. L'utilizzo di un costruttore parametrizzato non è più necessario quando si utilizza AutoMapper, poiché si converte direttamente da un oggetto a un altro. Il costruttore parametrizzato è lì principalmente per mostrare ciò che è esplicitamente richiesto da questo oggetto.

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

Che Automapper è veramente buono per è la copia da DataObjects in oggetti Poco, o gli oggetti vista del modello.

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);