Me encontré con este mismo problema. Parece que ocurre cuando el tipo de fuente y el tipo de destino no son exactamente iguales.
En mi caso, tenía una tabla de SQL Server con un campo ID que era de tipo INT. El valor se estaba asignando a una clase con una propiedad que era de tipo largo (Int64). Esto daría como resultado que el valor esperado de 100 se asignara a algo como 668386727769314912. Después de cambiar el esquema de la tabla para que ID sea un BIGINT, los valores siempre se correlacionaron correctamente.
Recomendaría mirar de cerca el tipo de fuente y el tipo de destino para asegurar que sean exactamente iguales. Aparentemente, las conversiones que esperaría que funcionaran implícitamente (como Int32 a Int64) pueden causar problemas.
Aquí es un ejemplo que reproducir el 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());
}
}
Hmmm ... muy extraño ... ¿sería posible para que me envíe algunos datos de ejemplo y un objeto de origen de ejemplo que muestra el problema ? Eso debería ayudarme a reducirlo. ¡Gracias! –