title: Entity Framework SaveChanges error details
body: <p>When saving changes with <code>SaveChanges</code> on a data context is there a way to determine which Entity causes an error?  For example, sometimes I'll forget to assign a date to a non-nullable date field and get "Invalid Date Range" error, but I get no information about which entity or which field it's caused by (I can usually track it down by painstakingly going through all my objects, but it's very time consuming).  Stack trace is pretty useless as it only shows me an error at the <code>SaveChanges</code> call without any additional information as to where exactly it happened.</p>
  
  <p>Note that I'm not looking to solve any particular problem I have now, I would just like to know in general if there's a way to tell which entity/field is causing a problem.</p>
  
  <hr>
  
  <p>Quick sample of a stack trace as an example - in this case an error happened because <code>CreatedOn</code> date was not set on <code>IAComment</code> entity, however it's impossible to tell from this error/stack trace</p>
  
  <pre><code>    [SqlTypeException: SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.]
     System.Data.SqlTypes.SqlDateTime.FromTimeSpan(TimeSpan value) +2127345
     System.Data.SqlTypes.SqlDateTime.FromDateTime(DateTime value) +232
     System.Data.SqlClient.MetaType.FromDateTime(DateTime dateTime, Byte cb) +46
     System.Data.SqlClient.TdsParser.WriteValue(Object value, MetaType type, Byte scale, Int32 actualLength, Int32 encodingByteSize, Int32 offset, TdsParserStateObject stateObj) +4997789
     System.Data.SqlClient.TdsParser.TdsExecuteRPC(_SqlRPC[] rpcArray, Int32 timeout, Boolean inSchema, SqlNotificationRequest notificationRequest, TdsParserStateObject stateObj, Boolean isCommandProc) +6248
     System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) +987
     System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) +162
     System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) +32
     System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) +141
     System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) +12
     System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior) +10
     System.Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute(UpdateTranslator translator, EntityConnection connection, Dictionary`2 identifierValues, List`1 generatedValues) +8084396
     System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter) +267
  
  [UpdateException: An error occurred while updating the entries. See the inner exception for details.]
     System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter) +389
     System.Data.EntityClient.EntityAdapter.Update(IEntityStateManager entityCache) +163
     System.Data.Objects.ObjectContext.SaveChanges(SaveOptions options) +609
     IADAL.IAController.Save(IAHeader head) in C:\Projects\IA\IADAL\IAController.cs:61
     IA.IAForm.saveForm(Boolean validate) in C:\Projects\IA\IA\IAForm.aspx.cs:198
     IA.IAForm.advance_Click(Object sender, EventArgs e) in C:\Projects\IA\IA\IAForm.aspx.cs:287
     System.Web.UI.WebControls.Button.OnClick(EventArgs e) +118
     System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +112
     System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
     System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
     System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36
     System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5019
  </code></pre>