【发布时间】:2018-07-10 23:33:44
【问题描述】:
我正在从数据阅读器读取数据并希望自动映射到对象列表中,但是虽然使用基本反射可以正常工作,但使用 Automapper 时总是得到一个空列表。
这是我使用反射的代码:
List<T> res = new List<T>();
using (var cmd = new OleDbCommand("Select ID, THP, Parent FROM Node_DP", conn))
{
conn.Open();
using (var reader = cmd.ExecuteReader())
{
if(reader.HasRows)
{
while (reader.Read())
{
T t = new T();
for (int inc = 0; inc < reader.FieldCount; inc++)
{
Type type = t.GetType();
PropertyInfo prop = type.GetProperty(reader.GetName(inc));
prop.SetValue(t, reader.GetValue(inc), null);
}
res.Add(t);
}
}
}
}
使用自动映射器我执行以下操作:
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<DbDataReader, List<T>>();
});
var res2 = iMapper.Map<DbDataReader, List<T>>(reader);
[编辑] 我下载了 Automapper.Data 包并将我的代码更改为:
var config = new MapperConfiguration(cfg =>
{
cfg.AddDataReaderMapping();
cfg.CreateMap<DbDataReader, List<T>>();
});
我的类有实例变量,其大小写与 select 语句相同。
怎么了?
【问题讨论】:
标签: c# automapper