這個問題相信只要是做MVC的,都碰到過,也都知道錯誤的原因,就是觸發了定義的實例字段校驗規則。比如定義的不為空,但是為空了,或者定義的字段長度為50,但是超過50了。
可是有時雖然知道是這樣,但是具體問題解決的時候還是無從下手。我最近就碰到一個,知道是在更新某個表的時候出現的這個問題。可是在本地無法具現此錯誤,這個錯誤是在特定條件發生的,我并不知道此特定發生條件是什么,很郁悶。
在網上找了下,知道發生這個錯誤會觸發DbEntityValidationException異常,這個異常會有詳細的異常信息說明是哪個字段,出現了什么錯誤,只不過需要循環輸出。打算輸出到日志文件中看是什么錯誤。代碼如下:
try { es2.Update(examList); } catch (DbEntityValidationException dbEx) { foreach (var validationErrors in dbEx.EntityValidationErrors) { foreach (var validationError in validationErrors.ValidationErrors) { EventLog.Log(string.Format("Class: {0}, PRoperty: {1}, Error: {2}", validationErrors.Entry.Entity.GetType().FullName, validationError.PropertyName, validationError.ErrorMessage), "error"); } } throw; } catch (Exception ex) { throw; }之所以用2個catch,是為了防止有其他非DbEntityValidationException 錯誤時,沒有錯誤日志。編譯,上傳到服務器,過了一會,查看日志文件,找到錯誤原因了。
Class: System.Data.Entity.DynamicProxies.ExamList_839A196D8FC4CF7E8A791B7F29782BA535E73532A1C3C2C00FD6EF30B6C4A660, Property: StudentAnswer, Error: 字段 StudentAnswer 必須是最大長度為 50 的字符串。是StudentAnswer 字段長度不夠了。找到答案就好辦了。擴大字段大小,問題解決
新聞熱點
疑難解答