我遇到了一個奇怪的問題。我有一個包含現有項目的數據庫,我添加了一個新的驗證規則,因此數據庫中的某些項目不符合此新規則。Foreach循環中的實體驗證,如果驗證失敗,它將在下一個循環中保持失敗
我有一個循環,發現一個記錄,改變一個元素然後將其保存到數據庫中,這樣的:
foreach(int foo in bar)
{
Model model = db.Model.Find(foo);
model.updated = true;
if(ModelState.IsValid)
{
db.Entry(model).State = EntityState.Modified;
db.SaveChanges();
}
}
我想,對於不符合新的驗證規則記錄將只是不會更新,因爲ModelState.IsValid
不會通過。但情況並非如此,它會導致驗證失敗的異常。所以我把它放在一個try catch
中,當我在它的時候,我會記錄錯誤,所以我知道哪些記錄是無效的。所以現在看起來是這樣的:
foreach(int foo in bar)
{
Model model = db.Model.Find(foo);
model.updated = true;
try
{
db.Entry(model).State = EntityState.Modified;
db.SaveChanges();
}
catch(Exception x)
{
// log error
if(ModelState.IsValid)
{
db.ErrorLogs.Add(errorLog);
db.SaveChanges();
}
}
}
這也trows一個驗證失敗的異常,我猜是因爲在try
異常沒有被清除。很好,我決定嘗試,而不是趕上錯誤。所以它看起來像這樣:
foreach(int foo in bar)
{
Model model = db.Model.Find(foo);
model.updated = true;
try
{
db.Entry(model).State = EntityState.Modified;
db.SaveChanges();
}
catch()
{
}
}
現在是什麼最終情況是,說我有100條記錄,可通過foreach循環循環,如果#27驗證失敗,不更新每一個來失敗後,因此紀錄!
這是非常加重的,我該如何解決這個問題?有沒有辦法來清除驗證錯誤?爲什麼錯誤會持續到所有其他循環?是否因爲db
在循環之外被聲明? 爲什麼它首先傳遞ModelState.IsValid?
感謝
你用'for'循環檢查嗎? – Damith
現在有和同樣的問題。 –