使用Visual Studio从脚手架提供的代码我自动从模型中获取删除和编辑控制器,但如果我需要根据基于数据库y的行编辑/删除数据库x中的行,该怎么办?在id上我通过代码解释它:
控制器编辑我做的事
var despesaUtilizador = db.SaldoUtilizadores.Where(x => x.despesaId == despesa.DespesaId).Where(x => x.ApplicationUserId == userId).First();
despesaUtilizador.valor = despesa.DespesaValor;
despesaUtilizador.data = despesa.Data;
if (ModelState.IsValid)
{
db.Entry(despesaUtilizador).State = EntityState.Modified;
db.Entry(despesa).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
我对数据库SaldoUtilizadores进行了查询以获取与发送给控制器的id匹配的行,然后我尝试编辑该行,我只是不知道如果有人能解释我是否正确地做到了这一点它
控制器删除
public ActionResult DeleteConfirmed(int id)
{
Despesa despesa = db.Despesas.Find(id);
var userId = User.Identity.GetUserId();
var despesaUtilizador = db.SaldoUtilizadores.Where(x => x.despesaId == id).Where(x => x.ApplicationUserId == userId).First();
db.Despesas.Remove(despesa);
db.SaldoUtilizadores.Remove(despesaUtilizador);
db.SaveChanges();
return RedirectToAction("Index");
}
在删除中我尝试做同样的事情,它也不起作用:/
答案 0 :(得分:0)
我得到此异常“序列不包含任何元素”
来自使用First()
。如果没有匹配的元素,它将引发该异常,因为它没有“第一”项可以返回。
除非您100%确定集合中确实有项目,否则您应始终使用FirstOrDefault()
。如果没有匹配,FirstOrDefault()
将返回null,而不是引发异常。然后,您可以检查是否存在null并相应地处理。
如果您认为确实应该返回某些内容,那么您需要弄清楚为什么不是这种情况。检查数据库中的数据,确保您发出的查询与实际存在的内容对齐。