C#foreach导致已经存在一个打开的DataReader关联错误

时间:2011-07-06 13:19:17

标签: asp.net asp.net-mvc-3 roleprovider

我的accountRepository

中有以下代码
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:已经有一个与此Connection关联的打开DataReader,必须先关闭它。

我的foreach循环错了吗?

2 个答案:

答案 0 :(得分:2)

您可以简化方法:

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

return RoleList.Select(x => x.roles.name).ToArray();

答案 1 :(得分:0)

尝试以下代码。使用ToArray可以确保它预先填充所有UserRoles,因此它将使用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;
}