Я столкнулся с этой же проблемой. Кажется, это происходит, когда ваш тип источника и тип назначения не совпадают.
В моем случае у меня была таблица SQL Server с полем идентификатора типа INT. Значение сопоставлялось с классом со свойством типа long (Int64). Это приведет к тому, что ожидаемое значение 100 будет сопоставлено с чем-то вроде 668386727769314912. После изменения схемы таблицы так, чтобы идентификатор представлял собой BIGINT, значения всегда отображаются правильно.
Я бы порекомендовал присмотреться к типу источника и типу назначения, чтобы убедиться, что они в точности совпадают. Очевидно, что преобразования, которые вы ожидаете работать неявно (например, от Int32 до Int64), могут вызвать проблемы.
Вот пример, который воспроизведет проблему:
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());
}
}