Member 12919448 Ответов: 1

Invalidoperationexception: с этой командой уже связан открытый datareader, который должен быть закрыт в первую очередь. С помощью ASP.NET идентичность


Я пытаюсь вернуть данные из базы данных:


public List<DataModel> GET()
    {
        foreach (var users in db.Users) {
            var user = db.Users.Select(x => new DataModel()
            {
                Email = users.Email,
                UserName = users.UserName,
                FirstName = users.FirstName,
                LastName = users.LastName,
                Age = users.Age,
                Phone = users.Phone,
                Department = users.Department
            });
            return user.ToList();

        }


Вот класс БД:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser, CustomRole,
int, CustomUserLogin, CustomUserRole, CustomUserClaim>
{
    public ApplicationDbContext()
        : base("DefaultConnection")
    {
    }

    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }
}




Вот в чем ошибка:

InvalidOperationException: There is already an open DataReader associated with this Command which must be closed first.


Не могли бы вы сказать, что не так с этим кодом?

Что я уже пробовал:

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

public List<DataModel> GET()
           {


                   var user = db.Users.Select(x => new DataModel()
                   {
                       Email = db.Users.FirstOrDefault().Email,
                       UserName = db.Users.FirstOrDefault().UserName,
                       FirstName = db.Users.FirstOrDefault().FirstName,
                       LastName = db.Users.FirstOrDefault().LastName,
                       Age = db.Users.FirstOrDefault().Age,
                       Phone = db.Users.FirstOrDefault().Phone,
                       Department = db.Users.FirstOrDefault().Department
                   });
                   return user.ToList();

           }

1 Ответов

Рейтинг:
9

F-ES Sitecore

Это, наверное, потому, что эта линия

foreach (var users in db.Users)


открывает соединение и эта линия

var user = db.Users.Select(


устанавливает второе соединение, которое активируется при использовании .Толист на следующей строке.

На самом деле вам не нужны эти две петли, это непроверено, но попробуйте что-то вроде

public List<DataModel> GET()
    {
            var user = db.Users.Select(x => new DataModel()
            {
                Email = x.Email,
                UserName = x.UserName,
                FirstName = x.FirstName,
                LastName = x.LastName,
                Age = x.Age,
                Phone = x.Phone,
                Department = x.Department
            });

            return user.ToList();

        }


Member 12919448

Как же мне этого не хватало :|
Ты потрясающая
Спасибо