私はこの同じ問題に遭遇しました。ソース タイプと宛先タイプがまったく同じでない場合に発生するようです。
私の場合、INT 型の ID フィールドを持つ SQL Server テーブルがありました。値は、long 型 (Int64) のプロパティを持つクラスにマップされていました。ID が 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());
}
}