我正在尝试使用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对应的记录?非常需要这个帮助。感谢。
答案 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");
}