我也遇到了同样的问题。当源类型和目标类型不完全相同时,似乎会出现这种情况。
在我的情况下,我有一个 SQL Server 表,其中 ID 字段的类型为 INT。该值被映射到一个属性类型为 long(Int64)的类中。这将导致预期值 100 被映射为类似于 668386727769314912 的值。在更改表模式以使 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());
}
}