C# 自动映射器-数据表到泛型类型(用于DTO)的映射不工作
我试图将使用Ado.Net检索的数据表转换为DTO。正在传递的T类型的DTO与DataTable具有完全相同的字段和数据类型,但我得到以下异常: 这可行吗? geekytidbits的Brady Holt有一篇老文章要做以下工作,但DynamicMap现在已经过时了 列表人员=AutoMapper.Mapper.DynamicMap> sourceDataTable.CreateDataReader 找到了未映射的成员。查看下面的类型和成员。添加自定义映射表达式、忽略、添加自定义解析程序或修改源/目标类型 IDataReader->UserDto目标成员列表 System.Data.IDataReader->MyApp.Console.UserDto目标成员列表 未映射属性: UserId//int类型 名字//字符串类型 LastName//字符串类型 代码如下:C# 自动映射器-数据表到泛型类型(用于DTO)的映射不工作,c#,datatable,automapper,C#,Datatable,Automapper,我试图将使用Ado.Net检索的数据表转换为DTO。正在传递的T类型的DTO与DataTable具有完全相同的字段和数据类型,但我得到以下异常: 这可行吗? geekytidbits的Brady Holt有一篇老文章要做以下工作,但DynamicMap现在已经过时了 列表人员=AutoMapper.Mapper.DynamicMap> sourceDataTable.CreateDataReader 找到了未映射的成员。查看下面的类型和成员。添加自定义映射表达式、忽略、添加自定义解析程序或修改源
在另一篇帖子中,有人说IDataReader的支持已经从Automapper 4.0上移除
但我在另一篇帖子的上找到了答案,有人说IDataReader支持已经从Automapper 4.0上删除了
但我在找到了答案,所以不要使用AutoMapper。使用LINQ单独选择项目集合。我不希望为每个可能具有不同字段的DTO单独编码。但是,每个DTO都将对应于存储过程检索的数据表。您可以使用实体框架吗?它支持执行存储过程并将其自动转换为C对象。我很确定你必须为你正在使用的每个DTO创建自动映射设置。我和krillgar在一起,自动映射看起来像一颗神奇的子弹,我是一个advovate,但后来我意识到,在其他人中,它付出的比回报更多。在你们可以的时候释放你们自己。谢谢你们从另一个SO帖子中找到了解决方案。然后不要使用AutoMapper。使用LINQ单独选择项目集合。我不希望为每个可能具有不同字段的DTO单独编码。但是,每个DTO都将对应于存储过程检索的数据表。您可以使用实体框架吗?它支持执行存储过程并将其自动转换为C对象。我很确定你必须为你正在使用的每个DTO创建自动映射设置。我和krillgar在一起,自动映射看起来像一颗神奇的子弹,我是一个advovate,但后来我意识到,在其他人中,它付出的比回报更多。尽你所能释放你自己。谢谢你们从另一个SO帖子中找到了解决方案。
public static class DtoTransformDataTable<T>
{
public static IEnumerable<T> JustDoIt(DataTable dt)
{
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<IDataReader, IEnumerable<T>>();
});
var mapper = config.CreateMapper();
try
{
mapper.ConfigurationProvider.AssertConfigurationIsValid();
}
catch (Exception ex)
{
throw ex;
}
var listOfT = mapper.Map<List<T>>(dt.CreateDataReader());
return listOfT;
}
}