Why I love micro-Orms

This is the main reason for me to not use Ado.Net directly anymore. With micro-Orms I can write this legacy code:

    public IEnumerable<User> GetUsersWithInvalidAttempts(int minAttempts)
    {
        using (var conn = CreateConnection())
        {
            var query = "select Id, Name, LastLogin, Active from users where InvalidLoginAttempts >= @minAttempts";
            var command = new SqlCommand(query, conn) {CommandType = CommandType.Text};
            command.Parameters.Add(new SqlParameter("minAttempts", minAttempts));

            using (var reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    yield return new User
                                 {
                                     Id = reader.GetInt32(reader.GetOrdinal("Id")),
                                     Name = reader.GetString(reader.GetOrdinal("Name")),
                                     LastLogin = reader.IsDBNull(reader.GetOrdinal("LastLogin")) ? 
                                        (DateTime?)null : 
                                        reader.GetDateTime(reader.GetOrdinal("LastLogin")),
                                     Active = reader.GetBoolean(reader.GetOrdinal("Active"))
                                 };
                }
            }
        }
    }

Into this:

    public IEnumerable<User> GetUsersWithInvalidAttempts(int minAttempts)
    {
        using (var conn = CreateConnection())
        {
            var query = "select Id, Name, LastLogin, Active from users where InvalidLoginAttempts >= @minAttempts";
            return conn.Query<User>(query, new {minAttempts}, commandType: CommandType.Text);
        }
    }

It just works…. In this case I was using Dapper.Net but others are pretty similar.

Just for clarity, this is the class User:

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public DateTime? LastLogin { get; set; }
    public bool Active { get; set; }
}