2011-05-28 46 views
3

我在asp.net MVC3應用程序下面的代碼:驗證失敗的一個或多個實體

string msg = "Beginning report run for: "; 
      msg += " Obligor Registry ID: " + obligorID; 
      msg += " Requesting Organization Registry ID:" + requestingOrgID; 
      msg += " Requesting Agent Registry ID: " + requestingAgentID; 

      TransactionLog lg = new TransactionLog(); 
      lg.TransactionTypeId = 2; 
      lg.Message = msg;  


      context.TransactionLogs.Add(lg); 
      long referenceNumber = context.SaveChanges(); 
      return referenceNumber; 

和我收到以下錯誤:雖然你是內

Validation failed for one or more entities. See 'EntityValidationErrors' property for more details. 
+0

不錯,你在例外的細節中找到了什麼? – 2011-05-28 11:05:53

+0

我已經粘貼了上面的詳細信息:驗證一個或多個實體失敗。有關更多詳細信息,請參閱「EntityValidationErrors」屬性。 – DotnetSparrow 2011-05-28 11:08:59

+1

異常消息說您應該檢查其「EntityValidationErrors」屬性以獲取更多信息... – 2011-05-28 11:49:54

回答

16

在調試模式所述catch {...}塊開闢 「快速監視」 窗口(CTRL + ALT + q),並在那裏粘貼:

((System.Data.Entity.Validation.DbEntityValidationException)ex).EntityValidationErrors

這將讓你深入到ValidationErrors樹。這是我發現能夠即時洞察這些錯誤的最簡單方法。

2
catch (DbEntityValidationException dbEx) 
{ 
    foreach (var validationErrors in dbEx.EntityValidationErrors) 
    { 
     foreach (var validationError in validationErrors.ValidationErrors) 
     { 
      Trace.TraceInformation("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage); 
     } 
    } 
} 

您需要的命名空間:System.Data.Entity.Validation

1

@GONeale幫了我在這方面。此外,在我的情況下,這種例外是因爲我有某些非空db字段,我沒有包含在某些事務的部分響應更新中。在這種情況下,context.Database.ExecuteSQLCommand將是我的建議。