支持将DataTableReader转换为List <t>

时间:2015-11-12 16:59:28

标签: c# automapper

我通过ADO和SqlDataAdapter使用存储过程有一个旧的DAL DAL。我试图通过使用AutoMapper节省大量时间。我认为将DataTableReader映射到List会很简单。看起来功能已被删除。移动到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

1 个答案:

答案 0 :(得分:1)

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收集过渡结束。