c# - 支持将 DataTableReader 转换为 List<T>

标签 c# automapper

我有一个旧式 DAL,它通过 ADO 和 SqlDataAdapter 使用存储过程。我试图通过使用 AutoMapper 来节省大量时间。我认为将 DataTableReader 映射到列表会很简单。似乎该功能在 3.3 中被移除。在 4.1 中有一个新模块 Automapper.Data,它可能包含该功能。我已将代码包含在我正在尝试做的事情中。有人可以让我知道这是否可行吗?如果可以,请指出一个使用示例。

if (ds.Tables.Count > 0)
{
    DataTable dt = ds.Tables[0];
    using (var reader = dt.CreateDataReader())
        if (reader.HasRows)
            result = Mapper.DynamicMap<IDataReader, List<T>>(reader);
}
return result;//<-- Result is always count 0

最佳答案

if (ds.Tables.Count > 0)
{
    DataTable dt = ds.Tables[0];
    using (var reader = dt.CreateDataReader())
        if (reader.HasRows)
            return DataReaderMapper<T>.GetRecordes(reader);
}

使用我的辅助方法来满足您的所有需求:

class DataReaderMapper<YourClass>
{
    static DataReaderMapper()
    {
        Mapper.Initialize(cfg =>
        {
            MapperRegistry.Mappers.Add(new AutoMapper.Data.DataReaderMapper { YieldReturnEnabled = true });
        });

        Mapper.CreateMap<IDataReader, YourClass>();
    }

    public static IEnumerable<YourClass> GetRecordes(IDataReader reader)
    {
        return  Mapper.Map<IDataReader, IEnumerable<YourClass>>(reader);
    }
}

请注意! DataReader 必须保持事件状态,直到 Result 集合的转换结束。

关于c# - 支持将 DataTableReader 转换为 List<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33677063/

相关文章:

c# - 使用 Linq 获取目录结构?

c# - 从同一服务器上的 Windows 服务发送在 ASP.NET MVC 应用程序中运行的 SignalR 广播

c# - 如何让 Unity 解析 AutoMapper 在映射时创建的模型?

c# - 将对象传递给 AutoMapper 映射

c# - log4net的默认位置在哪里

c# - 按可以为空的子记录值排序

c# - 如何将外部程序集的类型添加到工具箱控件? (WPF)

asp.net-mvc - 尝试在 ASP.NET MVC 中使用 Automapper 时,如何消除 SecurityException 错误?

Automapper ResolveUsing 或 MapFrom

c# - 自动映射器用前缀展开