在asp.net mvc中一次编辑多个记录

时间:2015-05-21 14:40:51

标签: c# asp.net asp.net-mvc

我正在尝试使用asp.net mvc 4& EF6我想在同一时间更新多条记录。但只有一个数据正在更新&休息仍然是一样的。这是我的代码,

控制器

var resetInfo = db.myInfoes.Where(p => p.id == ClId).FirstOrDefault();
if (resetInfo != null)
{
    resetInfo.id = 0;
    resetInfo.name = "N/A";
    resetInfo.phone = "N/A"
    db.SaveChanges();
    TempData["success"] = "Information Updated Successfully!";
    return RedirectToAction("Index");
}
else
{
    TempData["fail"] = "Error! Information Update Failed!";
    return RedirectToAction("Index");
}

我在这里做错了吗?如何一次更新与所有ID对应的记录?非常需要这个帮助。感谢。

3 个答案:

答案 0 :(得分:6)

不要使用FirstOrDefault ...这将只检索一条记录。

您可以检查您的查询是否返回任何数据(而不是检查FirstOrDefault是否返回null)。

var resetInfos = db.myInfoes.Where(p => p.id == ClId);

if (!resetInfos.Any()) {
   //Message could be "No data to update for this client" it's not really an Update fail
   TempData["fail"] = "Error! Information Update Failed!";

   //get out of here if you have no data
   return RedirectToAction("Index");
}
foreach (var resetInfo in resetInfos) {
   resetInfo.id = 0;//is it possible to have multiple resetInfo with id 0?
   resetInfo.name = "N/A";
   resetInfo.phone = "N/A"
}
TempData["success"] = "Information Updated Successfully!";
db.SaveChanges();
return RedirectToAction("Index");

答案 1 :(得分:4)

您需要一个集合,请使用以下代码:

var resetInfo = db.myInfoes.Where(p => p.id == ClId).ToList();
if (resetInfo != null)
{

   resetInfo.ForEach(a =>
      {
         a.id = 0;
         a.name = "N/A";
         a.phone = "N/A";
      });
    db.SaveChanges();
    TempData["success"] = "Information Updated Successfully!";
    return RedirectToAction("Index");
}
else
{
    TempData["fail"] = "Error! Information Update Failed!";
    return RedirectToAction("Index");
}

答案 2 :(得分:1)

您在Where调用上调用FirstOrDefault(),这将仅请求第一条记录(如果没有返回,则只记录您记录类的默认实例)。

您可能希望改为执行以下操作:

var records = db.myInfoes.Where(p => p.id == ClId);
if (records.Any())
{
    foreach(var resetInfo in records)
    {
        resetInfo.id = 0;
        resetInfo.name = "N/A";
        resetInfo.phone = "N/A"
    }

    db.SaveChanges();
    TempData["success"] = "Information Updated Successfully!";
    return RedirectToAction("Index");
}
else
{
    TempData["fail"] = "Error! Information Update Failed!";
    return RedirectToAction("Index");
}