支持将 DataTableReader 转换为 List

本文关键字:List DataTableReader 转换 支持 | 更新日期: 2023-09-27 18:21:45

我有一个旧的DAL,通过ADO和SqlDataAdapter使用存储过程。我正在尝试通过使用自动映射器来节省大量时间。我认为将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

支持将 DataTableReader 转换为 List<T>

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学院的过渡结束。

相关文章: