Ich bin auf dasselbe Problem gestoßen. Es scheint aufzutreten, wenn der Quelltyp und der Zieltyp nicht genau übereinstimmen.
In meinem Fall hatte ich eine SQL Server-Tabelle mit einem ID-Feld, das vom Typ INT war. Der Wert wurde einer Klasse mit einer Eigenschaft vom Typ long (Int64) zugeordnet. Dies würde dazu führen, dass der erwartete Wert von 100 etwa 668386727769314912 zugeordnet wird. Nachdem das Tabellenschema so geändert wurde, dass ID ein BIGINT ist, wurden die Werte immer korrekt zugeordnet.
Ich würde empfehlen, sich den Quelltyp und den Zieltyp genau anzusehen, um sicherzustellen, dass sie genau übereinstimmen. Offenbar können Konvertierungen, von denen man erwarten würde, dass sie implizit funktionieren (wie Int32 nach Int64), Probleme verursachen.
Hier ist ein Beispiel, das das Problem reproduziert:
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());
}
}