查找实体框架中引起异常的确切实体。
查找实体框架中引起异常的确切实体。
实体框架在异常中提供了泛型信息,但未告知导致错误的具体实体和属性。如何获取更多关于错误的信息?
这种情况发生在许多情况下,例如:
操作失败:由于一个或多个外键属性是非空的,所以关系不能更改。当关系被更改时,相关的外键属性被设置为 null 值。如果外键不支持空值,则必须定义新关系、分配其他非空值的外键属性,或删除无关的对象。
以及
将 datetime2 数据类型转换为 datetime 数据类型时超出范围。该语句已终止。
异常详细信息:
[SqlException (0x80131904): 将 datetime2 数据类型转换为 datetime 数据类型时超出范围。该语句已终止。]
System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) +404
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() +412
System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +2660
System.Data.SqlClient.SqlDataReader.ConsumeMetaData() +59
System.Data.SqlClient.SqlDataReader.get_MetaData() +118
System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +6431425
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) +6432994
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) +538
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) +28
System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) +256
System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) +19
System.Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute(UpdateTranslator translator, EntityConnection connection, Dictionary
2 identifierValues, List
1 generatedValues) +270System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter) +391
[UpdateException:在更新条目时发生错误。有关详细信息,请参见内部异常。]
System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager,IEntityAdapter adapter)+11223976
System.Data.Objects.ObjectContext.SaveChanges(SaveOptions options)+833
System.Data.Entity.Internal.InternalContext.SaveChanges()+218
[DbUpdateException:在更新条目时发生错误。有关详细信息,请参见内部异常。]
System.Data.Entity.Internal.InternalContext.SaveChanges()+291
这是我在解决方案中的代码:
try { _context.SaveChanges(); } catch (System.Data.Entity.Validation.DbEntityValidationException dbEx) { Exception raise = dbEx; foreach (var validationErrors in dbEx.EntityValidationErrors) { foreach (var validationError in validationErrors.ValidationErrors) { string message = string.Format("{0}:{1}", validationErrors.Entry.Entity.ToString(), validationError.ErrorMessage); //raise a new exception inserting the current one as the InnerException raise = new InvalidOperationException(message , raise); } } throw raise; }
你可以将其作为基础添加到你的解决方案中……它可以构建一个嵌套的异常集合,并带上 Entity Framework 中的所有细节信息。