「EF」db.SaveChanges()的時候發生EntityValidationErrors的錯誤(DbEntityValidationException)
有時候利用EF直接存取資料庫的時候,可能會發生錯誤,也許是資料長度超過欄位長度,也許是把字串欄位存到數字欄位去。。。。等等
雖然只要利用try catch以及Exception的類別去擷取錯誤,就可以透過程式碼下中斷點並將exception「加入監看式」,就可以在檢查到底是哪個欄位存進去db的時候出了問題,不過實務上使用者會希望能馬上看到錯誤的細節,因此不可能還要將此錯誤forward給原本的程式設計師並下中斷點去找錯誤,這樣子太慢了!
因此就需要在db.SaveChanges()執行發生錯誤的時候,立刻顯示詳細內容,其實很簡單,只要try catch改用DbEntityValidationException類別去擷取錯誤,就可以直接透過DbEntityValidationException.EntityValidationErrors屬性,直接列印出錯誤內容囉!
using (MyEntities db = new MyEntities())
{
db.myTable.Add(item);
try
{
db.SaveChanges();
}
//利用DbEntityValidationException抓取ValidationErrors
//如果是用傳統的Exception類別,沒辦法直接在程式碼抓ValidationErrors
catch (DbEntityValidationException ex)
{
//丟出ex內容
var validationErrors = ex.EntityValidationErrors.SelectMany(x => x.ValidationErrors).Select(x => x.ErrorMessage);
var errMsgs = string.Join("; ", validationErrors);
return errMsgs.ToString();
}
}
參考文章:
http://edwardkuo.imas.tw/paper/2016/08/27/Net/2016-08-27/