DataReader

The most fastest data reader extractor in .NET. It is used to extract the content of the data reader object and map it into a class object.

Converts a DbDataReader into an IEnumerable. It is the core of the library’s data extraction pipeline.

It exposes a single method, ToEnumerable, which is pre-compiled AOT using Linq.Expressions.

This class caches the database schema and reuses all library-level caches during extraction to produce the most efficient AOT compilation.

Extract as Entity Model

using (var connection = new SqlConnection(connectionString))
{
    using (var reader = connection.ExecuteReader("SELECT * FROM [dbo].[Person];"))
    {
        var people = DataReader.ToEnumerable<Person>((DbDataReader) reader);
        // Do the stuffs for 'people' here
    }
}

Extract as Dynamic/ExpandoObject

using (var connection = new SqlConnection(connectionString))
{
    using (var reader = connection.ExecuteReader("SELECT * FROM [dbo].[Person];"))
    {
        var people = DataReader.ToEnumerable((DbDataReader) reader);
        // Do the stuffs for 'people' here
    }
}

DbFields

Passing a list of DbField objects allows the compiler to skip unnecessary DB-NULL checks.

using (var connection = new SqlConnection(connectionString))
{
    var dbFields = DbFieldCache.Get(connection, ClassMappedNameCache.Get<Person>(), connection.GetDbSetting());
    using (var reader = connection.ExecuteReader("SELECT * FROM [dbo].[Person];"))
    {
        var people = DataReader.ToEnumerable<Person>((DbDataReader) reader,
            dbFields,
            connection.GetDbSetting());
        // Do the stuffs for 'people' here
    }
}

Always pass the IDbSetting object when using the dbFields argument.