C # foreach приводит к тому, что уже существует ошибка, связанная с открытым DataReader - PullRequest
1 голос
/ 06 июля 2011

У меня есть следующие биты кода в моей учетной записи репозитория

public string[] GetRolesForUser(string email)
{
    // User rolesUser = FindByMail(email);
    IEnumerable<UserRole> RoleList = context.UserRolesSet.Where(u => u.user_id == 1).AsEnumerable();
    string[] arr1 = new string[RoleList.Count()];
    int i = 0;
    foreach (UserRole r in RoleList)
    {
        arr1[i] = r.roles.name;
        i++;
    }
    return arr1;
}

Это должно работать, но это не так. Когда он перебирает цикл foreach, он выдает мне эту ошибку:

Сведения об исключении: MySql.Data.MySqlClient.MySqlException: уже существует открытый DataReader, связанный с этим подключением, который должен быть закрыт первым.

Мой цикл foreach неправильный?

Ответы [ 2 ]

2 голосов
/ 06 июля 2011

Вы можете упростить метод:

IEnumerable<UserRole> RoleList = context.UserRolesSet.Where(u => u.user_id == 1);

return RoleList.Select(x => x.roles.name).ToArray();
1 голос
/ 06 июля 2011

Попробуйте следующий код. Использование ToArray гарантирует, что он заполняет все пользовательские роли заранее, поэтому он будет завершен с помощью DataReader.

public string[] GetRolesForUser(string email)
{
    // User rolesUser = FindByMail(email);
    IEnumerable<UserRole> RoleList = context.UserRolesSet.Where(u => u.user_id == 1).ToArray();
    string[] arr1 = new string[RoleList.Count()];
    int i = 0;
    foreach (UserRole r in RoleList)
    {
        arr1[i] = r.roles.name;
        i++;
    }
    return arr1;
}
...