Ошибка: "There is already an open DataReader associated with this Connection which must be closed first."

У меня два класса репозитория, у которых есть следующие методы GetAll:

public IEnumerable<Passport> GetAll()
{
    List<Passport> passwords = new List<Passport>();
    using (MySqlConnection connection = Connection.GetConnection())
    {
        MySqlCommand command = new MySqlCommand("SELECT * FROM Passports;", connection);

        MySqlDataReader reader = command.ExecuteReader();

        if (reader.HasRows)
        {
            while (reader.Read())
            {
                int id = reader.GetInt32(0);
                string series = reader.GetString(1);
                int number = reader.GetInt32(2);

                passwords.Add(new Passport(id, series, number));
            }
        }
    }

    return passwords;
}
public IEnumerable<Client> GetAll()
{
    List<Client> clients = new List<Client>();
    using (MySqlConnection connection = Connection.GetConnection())
    {
        MySqlCommand command = new MySqlCommand("SELECT * FROM Clients;", connection);
        connection.Open();
        MySqlDataReader reader = command.ExecuteReader();

        if (reader.HasRows)
        {
            while (reader.Read())
            {
                int id = reader.GetInt32(0);
                string surname = reader.GetString(1);
                string name = reader.GetString(2);
                string middlename = reader.GetString(3);
                int passportId = reader.GetInt32(4);

                PassportRepository passportRepository = new PassportRepository();
                Passport passport = passportRepository.GetById(passportId);
                clients.Add(new Client(id, name, surname, middlename, passport));
            }
        }
    }

    return clients;

}

При попытке вызова метода GetById (по сути он вызывает GetAll и ищет элемент по полю Id), я получаю ошибку "There is already an open DataReader associated with this Connection which must be closed first." при попытке создать reader MySqlDataReader reader = command.ExecuteReader();.

Я понимаю, что не могу вызвать reader на соединения на который уже вызван reader, как я могу получить информацию из бд через метод GetAll у passportRepository, при этом не отказываясь от DataReader?


Ответы (0 шт):