实体异常:在提供程序连接上启动事务时发生错误。有关详细信息,请参阅内部异常
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,Action
1 wrapCloseInAction) +1753986 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action
1 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();
【讨论】:
以上是关于实体异常:在提供程序连接上启动事务时发生错误。有关详细信息,请参阅内部异常的主要内容,如果未能解决你的问题,请参考以下文章
执行命令定义时发生错误。有关详细信息,请参阅内部异常 (linq)