2015-05-21 6 views
0

Я пытаюсь разработать веб-сайт, используя asp.net mvc 4 & EF6, где я хочу обновлять несколько записей одновременно. Но обновляется только одна информация & Остальные по-прежнему остаются прежними. Вот мои коды,Редактирование нескольких записей сразу в asp.net mvc

Контроллер

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"); 
} 

Могу ли я сделать что-то здесь не так? Как я могу обновить записи, соответствующие указанному идентификатору одновременно? Нужна эта помощь плохо. Благодарю.

+0

Вы делаете 'FirstOrDefault' ... Где ваши несколько записей? –

+1

'FirstOrDefault' должен дать вам подсказку ... –

+0

записи находятся в базе данных MSSQL. –

ответ

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"); 
+0

Именно это я и искал. Это заставило меня понять, что мне еще предстоит пройти долгий путь, чтобы понять asp.net. Tnx btw! :) –

1

Вы звоните 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"); 
} 
+1

записей не может быть нулевым, поэтому 'if records! = Null' бесполезно. Вы можете проверить, есть ли у записей данные, с 'if records.Any' –

+0

Обновлено. Разве это не метод, а не свойство? – Xefan

+0

О да, конечно. –

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"); 
} 
+0

@Farooque update '..ToList()' to '.ToList()' ... theres a typo in ur отвечает –

+0

Спасибо @ChaitanyaGadkari за указание. –

Смежные вопросы