[Dúvida] Usnado vários DataReaders! (.NET)

Olá, galerinha!
Tudo bem?

Pra quem entende de .NET:
Bom, estou desenvolvendo uma aplicação para uso pessoal. Eis que surgiu um problema ao usar DataReaders.
Tenho lá uma classe POCO chamada Situacao. Essa situação pode conter diversas alternativas. Eis a classe:

public class Situacao : IComparable<Situacao>
   {
      public long Codigo { get; set; }
      public String SituacaoTexto { get; set; }
      public byte[] ImagemFundo { get; set; }
      public ICollection<Alternativa> Alternativas { get; set; }

      public Situacao()
      {
         Codigo = long.MinValue;
         SituacaoTexto = String.Empty;
         ImagemFundo = new byte[0];
         Alternativas = new Collection<Alternativa>();
      }
      public Situacao(long anCodigo, String anSituacaoTexto, byte[] anImagemFundo, ICollection<Alternativa> anAlternativas)
      {
         Codigo = anCodigo;
         SituacaoTexto = anSituacaoTexto;
         ImagemFundo = anImagemFundo;
         Alternativas = anAlternativas;
      }
      public Situacao(Situacao anSituacao)
      {
         Codigo = anSituacao.Codigo;
         SituacaoTexto = anSituacao.SituacaoTexto;
         ImagemFundo = anSituacao.ImagemFundo;
         Alternativas = anSituacao.Alternativas;
      }

      public override string ToString()
      {
         return SituacaoTexto;
      }
      public int CompareTo(Situacao other)
      {
         return Codigo.CompareTo(other.Codigo);
      }

      public void AdicionarAlternativa(Alternativa objAlternativa)
      {
         Alternativas.Add(objAlternativa);
      }
   }

Beleza… Daí, para fazer a consulta de uma situação, faço assim:

public class SituacaoDAO : InterfaceBD, InterfaceDAO<Situacao>
{
      public static ICollection<Situacao> BuscarSituacoes(long aventura, NpgsqlConnection connection)
      {
         ICollection<Situacao> situacoes = new Collection<Situacao>();
         
         String query = String.Format("Select * From dbo.Situacoes Where Aventura = {0}", aventura);
         using(NpgsqlDataReader reader = ExecuteReader(query, ConnectionManager.Connection))
         {
            while(reader.Read())
            {
               Situacao situacao = new Situacao();
               //populo o objeto...
               situacao.Alternativas = AlternativaDAO.BuscarAlternativasPorSituacao(situacao.Codigo, connection);
               situacoes.Add(situacao);
            }
            reader.Close();
         }
         return situacoes;
      }
}

E, para buscar as alternativas por situação…

public class AlternativaDAO : InterfaceBD, InterfaceDAO<Alternativa>
{
      public static ICollection<Alternativa> BuscarAlternativasPorSituacao(long situacao, NpgsqlConnection connection)
      {
         ICollection<Alternativa> alternativas = new Collection<Alternativa>();
         
         String query = String.Format("Select * From dbo.Situacoes Where Aventura = {0}", aventura);
         using(NpgsqlDataReader reader = ExecuteReader(query, ConnectionManager.Connection))
         {
            while(reader.Read())
            {
               Alternativa alternativa = new Alternativa();
               //populo o objeto...
               alternativas.Add(situacao);
            }
            reader.Close();
         }
         return alternativas;
      }
}

Beleza… O problema é que ele não deixa eu usar um DataReader novo enquanto outro estiver aberto.
Há a seguinte mensagem: There is already an open DataReader associated with this Command which must be closed first.
Alguém sabe o porquê disso? Alguém tem ideia de como posso solucionar essa situação?

Valeu, gente, fiquem com Deus! :]