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?
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