DataReader tiene filas y datos, al intentar leer, dice "no hay datos presentes"

No he usado DataReaders en años (prefiero usar un ORM) pero me veo obligado a hacerlo en el trabajo. Retiro las filas y verifico queHasRows es verdad; depurar en este punto y examinar al lector muestra que mis datos están ahí.

Ahora este es el problema: en el momento en que llamo areader.Read(), al intentar expandir los resultados, dice "La enumeración no arrojó resultados" o lo que sea, y obtengo el "intento inválido de leer cuando no hay datos". error. Me sale lo mismo si no llamo aRead() (que es el valor predeterminado ya que DataReader comienza antes del primer registro).

No puedo recordar la forma correcta de manejar esto; los datose allí cuando revisoHasRows, pero desapareció en el momento en que trato de leerlo justo después o después de llamar aRead, lo que no tiene sentido como si no llamara aRead, el lector aún debe estar antes del primer registro, y si se establece la propiedad que lo inicia en el primer registro (¿SingleRow? Olvidé el nombre), entonces debería poder leer las filas sin llamar a Leer, sin embargo, ambas formas parecen moversepasad la fila que contiene los datos.

¿Qué estoy olvidando? El código es bastante sencillo:

TemplateFile file = null;
using (DbDataReader reader = ExecuteDataReaderProc("GetTemplateByID", idParam)) 
{ 
    if (reader.HasRows) // reader has data at this point - verified with debugger
    { 
        reader.Read(); // loses data at this point if I call Read()
        template = new TemplateFile 
        {
            FileName = Convert.ToString(reader["FileName"]) // whether or not I call
                                                            // Read, says no data here
        };
    }
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta