Mi sono imbattuto in questo stesso problema. Sembra che si verifichi quando il tipo di fonte e il tipo di destinazione non sono esattamente gli stessi.
Nel mio caso, avevo una tabella SQL Server con un campo ID di tipo INT. Il valore veniva mappato a una classe con una proprietà di tipo long (Int64). Ciò comporterebbe il valore previsto di 100 che viene mappato su qualcosa come 668386727769314912. Dopo aver modificato lo schema della tabella in modo che l'ID sia un BIGINT, i valori vengono sempre mappati correttamente.
Si consiglia di osservare attentamente il tipo di origine e il tipo di destinazione per garantire che siano esattamente uguali. Apparentemente, le conversioni che ci si aspetterebbe di lavorare implicitamente (come Int32 in Int64) possono causare problemi.
Ecco un esempio che riprodurre il problema:
public class DataMapperIssue
{
public class Person
{
public long id { get; set; }
public string first_name { get; set; }
public string last_name { get; set; }
}
public static void run()
{
var table = new DataTable();
table.Columns.Add("id", typeof(int));
table.Columns.Add("first_name", typeof(string));
table.Columns.Add("last_name", typeof(string));
table.Rows.Add(100, "Jeff", "Barnes");
table.Rows.Add(101, "George", "Costanza");
table.Rows.Add(102, "Stewie", "Griffin");
table.Rows.Add(103, "Stan", "Marsh");
table.Rows.Add(104, "Eric", "Cartman");
AutoMapper.Mapper.Reset();
AutoMapper.Mapper.CreateMap<IDataReader, Person>();
var results = AutoMapper.Mapper.Map<IDataReader, IList<Person>>(table.CreateDataReader());
}
}
fonte
2010-04-21 15:25:55
Hmmm ... molto strano ... sarebbe possibile per ricevere alcuni dati di esempio e un oggetto di origine di esempio che illustra il problema ? Questo dovrebbe aiutarmi a restringere il campo. Grazie! –