Уже есть открытый DataReader, связанный с этой Командой, который должен быть закрыт первым - PullRequest
0 голосов
/ 29 декабря 2018

У меня есть эта ошибка, и я не знаю, как ее решить.Я искал, как решить в Интернете, и каждый раз, когда это было вызвано какой-то команды SQL (что я не понял, и это не мой случай).

Вот код:

public ActionResult ConfirmarCandidatura(int id)
    {
        Candidatura candidatura = db.Candidaturas.Find(id);
        db.Propostas.SingleOrDefault(x => x.PropostaId == candidatura.PropostaId).CandidaturaAceite = candidatura;
        db.Propostas.SingleOrDefault(x => x.PropostaId == candidatura.PropostaId).CandidaturaId = candidatura.CandidaturaId;
        db.Candidaturas.Find(id).CandidaturaAceite = true;
        var candidaturas = db.Candidaturas.Where(x => x.PropostaId == candidatura.PropostaId);
        foreach(Candidatura c in candidaturas)
        {
            db.Candidaturas.SingleOrDefault(u => u.CandidaturaId == c.CandidaturaId).CandidaturaRejeitada = true;
        }
        db.SaveChanges();
        return RedirectToAction("CandidaturasRecebidas","Candidaturas");
    }

1 Ответ

0 голосов
/ 29 декабря 2018

Когда вы пишете следующее:

var candidaturas = db.Candidaturas.Where(x => x.PropostaId == candidatura.PropostaId);

вы действительно не закрываете DataReader.Поэтому, когда вы открываете другую DataReader

db.Candidaturas.SingleOrDefault(u => 
    u.CandidaturaId == c.CandidaturaId).CandidaturaRejeitada = true;

, вы получаете ошибку.Вы должны закончить первое утверждение с .ToList() или ToArray() или чем-то подобным.Это даст вам фактический результат вместо IEnumerable

. В качестве отдельного комментария очень плохая идея написать db.Propostas.SingleOrDefault(x => x.PropostaId == candidatura.PropostaId).CandidaturaAceite (у вас есть несколько таких).Если результат null равен , а не , используйте Single() вместо SingleOrDefault().Если это возможно , проверьте наличие null до получения дочернего поля - в противном случае вы получите NullException

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...