首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >System.Data.EntityException:基础提供程序在提交时失败

System.Data.EntityException:基础提供程序在提交时失败
EN

Stack Overflow用户
提问于 2011-12-08 20:25:10
回答 2查看 15.8K关注 0票数 20

使用Entity Framework,我昨晚在我的一个应用程序中收到了以下几个异常:

代码语言:javascript
复制
System.Data.EntityException: The underlying provider failed on Commit. ---> 
System.Data.SqlClient.SqlException: Timeout expired.  The timeout period elapsed prior 
to completion of the operation or the server is not responding.     
    at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) 
    at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()     
    at System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, UInt32 error)
    at System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult, TdsParserStateObject stateObj)
    at System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket()     
    at System.Data.SqlClient.TdsParserStateObject.ReadBuffer()     
    at System.Data.SqlClient.TdsParserStateObject.ReadByte()     
    at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler,SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)     
    at System.Data.SqlClient.TdsParser.TdsExecuteTransactionManagerRequest(Byte[] buffer, TransactionManagerRequestType request, String transactionName, TransactionManagerIsolationLevel isoLevel, Int32 timeout, SqlInternalTransaction transaction, TdsParserStateObject stateObj, Boolean isDelegateControlRequest)
    at System.Data.SqlClient.SqlInternalConnectionTds.ExecuteTransactionYukon(TransactionRequest transactionRequest, String transactionName, IsolationLevel iso, SqlInternalTransaction internalTransaction, Boolean isDelegateControlRequest)     
    at System.Data.SqlClient.SqlInternalConnectionTds.ExecuteTransaction(TransactionRequest transactionRequest, String name, IsolationLevel iso, SqlInternalTransaction internalTransaction, Boolean isDelegateControlRequest)
    at System.Data.SqlClient.SqlInternalTransaction.Commit()     
    at System.Data.SqlClient.SqlTransaction.Commit()
    at System.Data.EntityClient.EntityTransaction.Commit()     
    --- End of inner exception stack trace ---     
    at System.Data.EntityClient.EntityTransaction.Commit()     
    at System.Data.Objects.ObjectContext.SaveChanges(SaveOptions options)     
    at System.Data.Entity.Internal.InternalContext.SaveChanges()     
    at System.Data.Entity.Internal.LazyInternalContext.SaveChanges()

关于这个错误的有趣之处在于,数据实际上是写入数据库的。I found a related post on a MS site这似乎表明这是一个与网络有关的错误。

我需要帮助的几个问题是:

  1. 我有什么办法来排除这个错误?
  2. 很可能与网络有关,或者数据库可能是可疑的?
  3. 我如何才能从代码中分辨出事务是否真的查询了数据库以检查是否成功,或者只是重试了重试这个错误的catch/retry?
  4. What我确实重试了这个事务,这是如何通过Entity
  5. 自动完成的,或者我只是简单地重试应该查看的其他项目吗?

提前谢谢。

更新

使用Ignite for SQL,我们能够确定来自另一个组的辅助SQL进程正在独占CPU,使我们的应用程序无法正常运行。简而言之,我们将继续增加一个辅助服务器,以防止两个团队之间发生进一步的冲突。

这个异常的有趣之处在于,事务实际上是成功的,而不是失败的。

EN

回答 2

Stack Overflow用户

发布于 2012-05-24 16:52:06

我敢打赌,来自事务提交命令的成功响应没有被发送(或发送得不够快),从而导致代码中出现异常。一种疯狂的边缘案例。这类异常并不一定意味着命令的实际执行失败,只意味着有一个失败。

同样,如果在发送webservice调用的响应时出现问题,也不一定意味着没有应用该调用的任何副作用。

票数 1
EN

Stack Overflow用户

发布于 2013-05-11 22:54:19

对于Luke来说,+1的解释是好的。错误的措辞是不幸的。

代码语言:javascript
复制
System.Data.EntityException: **The underlying provider failed on Commit.** ---> 
System.Data.SqlClient.SqlException: Timeout expired.  The timeout period elapsed prior 

应阅读

代码语言:javascript
复制
System.Data.EntityException: **The underlying provider failed to respond to Commit**
System.Data.SqlClient.SqlException: Timeout expired.  The timeout period elapsed prior 

可能的原因是网络或服务器问题。例如100CPU或其他服务器延迟,都是正确的。但您不知道它是否已提交,如果这是超时情况。如果收到失败的响应,则数据库应该已经回滚。当然,如果这种情况没有发生,那么DB就会使hummm崩溃,并导致潜在的腐败。我希望是半生的。

我在一个1 billion+的行表中见过...在增长下的空间分配中,由于索引和数据区需要扩展,需要花费30秒以上。但是提交确实发生了。客户端已超时。在线重组也会导致这样的延迟(至少我在DB2上看到过)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8430960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档