所以我有以下代碼:操作是無效的交易的LINQ to SQL ExecuteCommand的狀態
var transactionScopeOptions = new TransactionOptions() { IsolationLevel = IsolationLevel.ReadUncommitted, Timeout = TimeSpan.FromMinutes(2) };
using (TransactionScope transactionScope = new TransactionScope(TransactionScopeOption.Required, transactionScopeOptions))
{
/* Linq update, insert, delete, read, etc. */
protected const string UpdateQuery = @"SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
BEGIN TRANSACTION;
/* dirty reads & 3 table updates */
COMMIT TRANSACTION;"
dataContext.ExecuteCommand(UpdateQuery, new object[] { fooID, fooTime })
transactionScope.Complete();
}
凡在第一,我不做的LINQ to SQL字符串查詢,然後在一類,我用了很長的字符串查詢來更新3個表格。這是我得到例外的部分。 (在ExecuteCommand中)
環境是WCF多線程,在項目啓動時有一個日誌,當項目結束時有一個日誌,它不是超時異常。
我處理超過數十萬個併發設置爲多項的項目。
任何想法爲什麼拋出異常? dataContext僅爲每個項目實例化一次。
編輯:命令超時設置爲1小時,錯誤發生在幾分鐘內從開始。如果隊列中的項目少於100,000個,通常不會發生這種情況。
編輯:堆棧跟蹤:
在 System.Transactions.TransactionState.EnlistPromotableSinglePhase(InternalTransaction TX,IPromotableSinglePhaseNotification promotableSinglePhaseNotification,事務AtomicTransaction的)
在 System.Transactions.Transaction.EnlistPromotableSinglePhase(IPromotableSinglePhaseNotification promotableSinglePhaseNotification)at System.Data.SqlClient.SqlInternalConnec tion.EnlistNonNull(事務 TX)在 System.Data.ProviderBase.DbConnectionInternal.ActivateConnection(事務 交易)在 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(的DbConnection owningObject,UInt32的waitForMultipleObjectsTimeout,布爾 allowCreate,布爾onlyOneCheckConnection, DbConnectionOptions USEROPTIONS,DbConnectionInternal &連接)在 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(的DbConnection owningObject,TaskCompletionSource1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource
1重試,DbConnectionOptions USEROPTIONS,DbConnectionInternal &連接)在 System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(的DbConnection outerConnection,DbConnectionFactory connectionFactory的, TaskCompletionSource 重試)在System.Data.SqlClient.SqlConnection.Open()在 System.Data.Linq.SqlClient.SqlConnectionManager.UseConnection (IConnectionUser 用戶)在System.Data.Linq.SqlClient.SqlProvider.get_IsSqlCe()在 System.Data.Linq.SqlClient.SqlProvider.InitializeProviderMode()在 System.Data.Linq.SqlClient.SqlProvider.System.Data。 Linq.Provider.IProvider.Execute(Expression query)at System.Data.Linq.DataContext。ExecuteCommand(字符串 命令,對象[]參數)
你可以添加堆棧跟蹤嗎? – Maarten
那裏,剛剛添加了stacktrace .. – MilkTea027