说我有:
var dt = new DataTable();
dt.Columns.Add("ID", typeof(int));
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Data Guid", typeof(Guid));
dt.Rows.Add(10, "Jonesy", Guid.NewGuid());
我知道我可以使用AutoMapper将其映射到我的自定义类Poco
中:
public class Poco
{
public int ID { get; set; }
public string Name { get; set; }
public Guid DataGuid { get; set; }
}
和
var pocos = AutoMapper.Mapper.DynamicMap<IDataReader, List<Poco>>(dt.CreateDataReader());
但是,我的列名为Data Guid
的列未正确映射,因为名称中有一个空间。有什么办法可以告诉自动应用程序在映射之前删除列名中的空格?
我已经研究了自定义类型的转换器,并使用了BeforeMap扩展程序。但是我无法更改模式。这可能吗?
只是为了覆盖我的所有基础,这是一个更大的项目,其中数据来自我无法操纵的来源。
为您的会员定义属性图:
AutoMapper.Mapper.CreateMap<IDataRecord, Poco>()
.ForMember(x => x.DataGuid, o => o.MapFrom(
s => s.GetGuid(s.GetOrdinal("Data Guid"))));
然后以这样的呼叫自动应用程序:
var pocos = AutoMapper.Mapper.Map<List<Poco>>(dt.CreateDataReader());
DynamicMap
更适合于使用匿名(动态)类型时。