实体异常:在提供程序连接上启动事务时发生错误。有关详细信息,请参阅内部异常

Posted

技术标签:

【中文标题】实体异常:在提供程序连接上启动事务时发生错误。有关详细信息,请参阅内部异常【英文标题】:Entity Exception: An error occurred while starting a transaction on the provider connection. See the inner exception for details 【发布时间】:2013-05-23 10:54:04 【问题描述】:

这个异常发生在这里:

public void updateAccount(CommonLayer.Account account)
    
        Entity.SaveChanges();
    

堆栈跟踪:

[SqlException (0x80131904): 不允许新事务,因为会话中还有其他线程在运行。] System.Data.SqlClient.SqlConnection.OnError(SqlException异常,布尔breakConnection,Action1 wrapCloseInAction) +1753986 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction)+5296058 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +558 System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) +1682 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +69 System.Data.SqlClient.TdsParser.TdsExecuteTransactionManagerRequest(Byte[] buffer, TransactionManagerRequestType request, String transactionName, TransactionManagerIsolationLevel isoLevel, Int32 timeout, SqlInternalTransaction transaction, TdsParserStateObject stateObj, Boolean isDelegateControlRequest) +796 System.Data.SqlClient.SqlInternalConnectionTds.ExecuteTransactionYukon(TransactionRequest transactionRequest, String transactionName, IsolationLevel iso, SqlInternalTransaction internalTransaction, Boolean isDelegateControlRequest) +395 System.Data.SqlClient.SqlInternalConnectionTds.ExecuteTransaction(TransactionRequest transactionRequest,字符串名称,IsolationLevel iso,SqlInternalTransaction internalTransaction,布尔 isDelegateControlRequest)+137 System.Data.SqlClient.SqlInternalConnection.BeginSqlTransaction(IsolationLevel iso, String transactionName) +230 System.Data.SqlClient.SqlInternalConnection.BeginTransaction(IsolationLevel iso) +12 System.Data.SqlClient.SqlConnection.BeginDbTransaction(IsolationLevel 隔离级别) +60 System.Data.Common.DbConnection.BeginTransaction(IsolationLevel isolationLevel) +10 System.Data.EntityClient.EntityConnection.BeginDbTransaction(IsolationLevelisolationLevel) +83

为什么会这样?

【问题讨论】:

你能添加更多关于你的模型的信息吗? 您需要什么信息? 我不确定。但可能发生这种情况是因为您没有使用 using()。 你能举个例子吗? 就像一个魅力。谢谢! 【参考方案1】:

我需要更多信息,因为我现在想要的是您的应用程序 Web 或桌面。如果你想使用 EDM 你应该使用 using() 代码块。 例如:

 public void SaveUser(User oldUser)
    
        using (MyEntity myEntity= new MyEntity ())
        
            var user = myEntity.Users.Where(u => u.UserId == oldUser.UserId).Single();
            user.UserName = oldUser.UserName;
            // and other changes
            myEntity.SaveChanges();
        
    

【讨论】:

以上是关于实体异常:在提供程序连接上启动事务时发生错误。有关详细信息,请参阅内部异常的主要内容,如果未能解决你的问题,请参考以下文章

纳闷的EF异常:在提供程序连接上启动事务时出错

执行命令定义时发生错误。有关详细信息,请参阅内部异常 (linq)

在实体框架中找出导致异常的确切实体

本地连接已连接上,但数据包异常,多是发送多接收少,无法上网,求解??

MSDTC 异常

SQLite 异常:SQLite 忙