我有此错误,我不知道如何解决。我搜索了如何在互联网上解决问题,以及每次它是由某些sql comand(我不了解,不是我的情况)引起的。
这是代码:
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");
}
答案 0 :(得分:2)
当您编写以下内容时:
public interface IAnimal {
IOwner Owner { get; }
}
public abstract class Mammal : IAnimal { ... }
public class Dog : Mammal { ... }
您并没有真正关闭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()
-否则将获得NullException