我在我的一个WCF webserice方法中遇到了关于“事务已死锁”的问题,该方法用于更新Server数据库中的大约8个表。我在我的WCF服务中使用LinqToSQL来执行所有与数据库相关的操作。
我的代码如下所示......
//Write code to open connection
foreach (var item in _updateList)
{
dataTrans = this.Context.Connection.BeginTransaction(
System.Data.IsolationLevel.ReadUncommitted
);
try{
//Save Changes to database
this.Context.SubmitChanges();
dataTrans.Commit();
}
catch (Exception ex)
{
//RollBack Datatransaction if any Table has invalid argument
if (dataTrans != null)
dataTrans.Rollback();
}
}
并在我的例外日志中找到以下错误
事务(进程ID 71)在锁定时死锁与另一个进程通信缓冲资源并被选为死锁牺牲品。重新运行该交易。
.Net SqlClient Data Provider
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlDataReader.HasMoreRows()
at System.Data.SqlClient.SqlDataReader.ReadInternal(Boolean setTimeout)
at System.Data.Linq.SqlClient.ObjectReaderCompiler.ObjectReaderBase`1.Read()
at System.Data.Linq.SqlClient.ObjectReaderCompiler.ObjectReader`2.MoveNext()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at Task.TaskMfssActionDtl.UpdateSqlToDevice(RequestSqlToDevice request)