验证失败的一个或多个实体

问题描述:

我在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

在调试模式所述catch {...}块开辟 “快速监视” 窗口(CTRL + ALT + q),并在那里粘贴:

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

这将让你深入到ValidationErrors树。这是我发现能够即时洞察这些错误的最简单方法。

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

@GONeale帮了我在这方面。此外,在我的情况下,这种例外是因为我有某些非空db字段,我没有包含在某些事务的部分响应更新中。在这种情况下,context.Database.ExecuteSQLCommand将是我的建议。