2013-01-10 5 views
5

ho le seguenti classi definite:Automapper correttamente in prima convocazione, ma salta proprietà in seconda convocazione

public class ImageIndexModel { 
    public string Description {get; set;} 
    public string InstrumentNumber {get; set;} 
} 

public class ImageEditModel : ImageIndexModel { 
    public int TotalCount = 0; 
} 

public class Clerk { //This is actually a class defined by LinqToSql 
    public string Description {get; set;} 
    public string InstrumentNo {get; set;} 
} 

Ora, nel mio global.asax, ho definito il seguente Mapping in Application_Start().

Mapper.CreateMap<ImageIndexModel, Clerk>() 
    .ForMember(dest => dest.InstrumentNo, 
       opt => opt.MapFrom(src => src.InstrumentNumber)); 

Infine, in uno dei miei controllori, ho il seguente codice:

var _existing = new Clerk(); 
var _default = new ImageEditModel() { 
       InstrumentNumber = "12345678", Description = "Test" 
       }; 
Mapper.Map(_default, _existing); 

La prima volta che io chiamo l'azione sul mio regolatore e questo mapping viene eseguito, tutto funziona bene e il InstrumentNumber è mappato correttamente allo InstrumentNo dell'oggetto Clerk. Tuttavia, la seconda volta che l'azione viene chiamata, InstrumentNo non viene mappato. InstrumentNumber ha sicuramente un valore ma InstrumentNo rimane nullo.

Qualche idea che cosa potrebbe accadere qui?

+2

Il tuo codice, come inserito nella domanda, funziona bene anche quando viene eseguito più volte. Quindi Automapper non sembra essere il problema. Sospetto qualcosa con la classe generata da Linq2SQL o qualcosa con il modo in cui viene utilizzata in ASP.NET. Senza più codice, è difficile dire cosa potrebbe essere sbagliato. Imposterei i breakpoint all'interno dei setter delle proprietà delle classi generate da linq2sql. – PatrickSteele

risposta

1

Una volta ho avuto il problema opposto, in cui erano presenti troppe mappature. È stato risolto chiamando mapper.reset() come descritto here for potentially other reasons. Forse qualcos'altro nella tua applicazione sta resettando il tuo mapper da sotto di te in modo tale che non risolva più i mapping che tu credi che dovrebbe (e lo fa per un breve periodo)? La chiave dall'altra domanda è che Automapper è singleton e quindi un'altra parte del codice può essere caricata o ritardata in ritardo e incrostata senza che tu lo sappia.

+0

Grazie per il vostro aiuto con questo. – RHarris

Problemi correlati