C# 自动映射器-数据表到泛型类型(用于DTO)的映射不工作

C# 自动映射器-数据表到泛型类型(用于DTO)的映射不工作,c#,datatable,automapper,C#,Datatable,Automapper,我试图将使用Ado.Net检索的数据表转换为DTO。正在传递的T类型的DTO与DataTable具有完全相同的字段和数据类型,但我得到以下异常: 这可行吗? geekytidbits的Brady Holt有一篇老文章要做以下工作,但DynamicMap现在已经过时了 列表人员=AutoMapper.Mapper.DynamicMap> sourceDataTable.CreateDataReader 找到了未映射的成员。查看下面的类型和成员。添加自定义映射表达式、忽略、添加自定义解析程序或修改源

我试图将使用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//字符串类型

代码如下:


在另一篇帖子中,有人说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;
    }
}