2011-12-20 181 views
5

私はを受け取っています。System.Data.SqlClient.SqlException:サーバーはトランザクションを再開できませんでした。 Linq-To-SQLクエリを実行する際の説明:6c00000001ここでサーバーはトランザクションの再開に失敗しました。 Linq-To-SQL

私のリポジトリの呼び出しです:

-- Region Parameters 
DECLARE @p0 VarChar(1000) = '11223344' 
-- EndRegion 
SELECT [t0].[CompanyID], [t0].[QualifierLicenseID], [t0].[InitiatedDate], [t0].[IsActive], [t0].[RowVersion], [t0].[LastUpdated], [t1].[QualifierLicenseID] AS [QualifierLicenseID2], [t1].[QualifierLicenseNumber], [t1].[LicenseTradeID], [t1].[LicenseExpirationDate], [t1].[FirstName], [t1].[LastName], [t1].[MailingAddress1], [t1].[MailingAddress2], [t1].[City], [t1].[StateAbbr], [t1].[ZIP], [t1].[Email], [t1].[Phone], [t1].[RowVersion] AS [RowVersion2], [t1].[LastUpdated] AS [LastUpdated2], [t3].[test], [t3].[LicenseTradeID] AS [LicenseTradeID2], [t3].[LicenseCode], [t3].[LicenseDescription], [t5].[QualifierLicenseHoldStatusID], [t5].[HoldReasonID], [t5].[QualifierLicenseID] AS [QualifierLicenseID3], [t5].[RowVersion] AS [RowVersion3], [t5].[LastUpdated] AS [LastUpdated3], (
    SELECT COUNT(*) 
    FROM [frontdesk].[QualifierLicenseHoldStatus] AS [t6] 
    WHERE [t6].[QualifierLicenseID] = [t1].[QualifierLicenseID] 
    ) AS [value], [t4].[CompanyID] AS [CompanyID2], [t4].[EIN], [t4].[CompanyName], [t4].[MailingAddress1] AS [MailingAddress12], [t4].[MailingAddress2] AS [MailingAddress22], [t4].[City] AS [City2], [t4].[StateAbbr] AS [StateAbbr2], [t4].[ZIP] AS [ZIP2], [t4].[Email] AS [Email2], [t4].[Phone] AS [Phone2], [t4].[RowVersion] AS [RowVersion4], [t4].[LastUpdated] AS [LastUpdated4] 
FROM [frontdesk].[Company2QualifierLicense] AS [t0] 
INNER JOIN ([frontdesk].[QualifierLicense] AS [t1] 
    LEFT OUTER JOIN (
     SELECT 1 AS [test], [t2].[LicenseTradeID], [t2].[LicenseCode], [t2].[LicenseDescription] 
     FROM [frontdesk].[LicenseTrade] AS [t2] 
     ) AS [t3] ON [t3].[LicenseTradeID] = [t1].[LicenseTradeID]) ON [t1].[QualifierLicenseID] = [t0].[QualifierLicenseID] 
INNER JOIN [frontdesk].[Company] AS [t4] ON [t4].[CompanyID] = [t0].[CompanyID] 
LEFT OUTER JOIN [frontdesk].[QualifierLicenseHoldStatus] AS [t5] ON [t5].[QualifierLicenseID] = [t1].[QualifierLicenseID] 
WHERE [t1].[QualifierLicenseNumber] = @p0 
ORDER BY [t0].[CompanyID], [t0].[QualifierLicenseID], [t1].[QualifierLicenseID], [t3].[LicenseTradeID], [t5].[QualifierLicenseHoldStatusID] 
GO 

-- Region Parameters 
DECLARE @x1 Int = 241 
-- EndRegion 
SELECT [t0].[CompanyHoldStatusID], [t0].[CompanyID], [t0].[HoldReasonID], [t0].[RowVersion], [t0].[LastUpdated] 
FROM [frontdesk].[CompanyHoldStatus] AS [t0] 
WHERE [t0].[CompanyID] = @x1 

をあなたがそう、私はすぐにデータベースクエリの後に作成し、DataContextの処分だ見ることができるように:ここでは

using (var ctx = new EntitiesDataContext()) 
{ 
    ctx.ObjectTrackingEnabled = false; 
    ctx.DeferredLoadingEnabled = false; 

    var loadOptions = new DataLoadOptions(); 
    loadOptions.LoadWith<Company2QualifierLicense>(n => n.QualifierLicense); 
    loadOptions.LoadWith<Company2QualifierLicense>(n => n.Company); 
    loadOptions.LoadWith<QualifierLicense>(n => n.QualifierLicenseHoldStatus); 
    loadOptions.LoadWith<QualifierLicense>(n => n.LicenseTrade); 
    loadOptions.LoadWith<Company>(n => n.CompanyHoldStatus); 
    ctx.LoadOptions = loadOptions; 

    return ctx.Company2QualifierLicenses.Where(p => p.QualifierLicense.QualifierLicenseNumber == qualifierLicense).ToList(); 
} 

は、SQLが生成され呼び出し元のメソッドからそれ以上呼び出しを行うことはできません。

データベースに2つのクエリが発行されていることがわかりました.2番目のクエリをデータベースに発行すると、トランザクションはコミットされましたが、Linq-To-SQLはそれよりスマートになるはずです。

私は.NET 4.0およびSQL Server 2008 R2(SP1)を使用しています - 10.50.2789.0

任意のアイデア?ここで

UPDATE 12月/ 2011分の21

は、例外の別の部分である: このセッションでアクティブなトランザクションが別のセッションによりコミットまたは中止された

UPDATE 12月/ 2011分の30

この問題はマイクロソフトに報告されており、バグとして確認されていますが修正されないことが判明し、Entity Frameworkに移行することをお勧めします。

+0

これは読み取り専用です。コミットによって意味されるもの – Pleun

+0

dataloadoptionsとobjectttrackingとdeferredloadingを有効にしないで実行するとどうなりますか? – Pleun

+0

@Pleun例外メッセージをお読みください。それはトランザクションを再開できないと言います。私はまだオブジェクトの追跡と遅延ロードなしで例外を取得します。データ読み込みオプションを削除するとうまくいきますが、それらも同様に機能するはずです。これは、単一のデータベース旅行でできるだけ多くの関連するエンタテイを得るための全体的なポイントです。 – epignosisx

答えて

0

同僚は、この問題がマイクロソフトに報告されており、それはバグとして確認されているが、それは固定されず、その勧告は、Entity Frameworkのに移動することであることがわかりました。

-1

コメントが長すぎます。

linq2sqlでの積極的な読み込みは、ツリー内の複数のレベルでは機能しません。だから、aとbの間のロードbはa-b-cを一度にロードしません。

http://www.lowendahl.net/showShout.aspx?id=190

これはあなたの追加の2番目のクエリを説明します。

なぜ私は知らない例外が発生するのですか?

+0

データベースに発行された追加のクエリに問題はありません。 1回のショットですべてのデータを取得することができない場合、私はそれで大丈夫です。しかし、私は質問に間違っているように見えることはありません。 – epignosisx

+0

タイムアウトの問題になりますか? SQL Serverでraw sqlを実行するとどうなりますか? – Pleun

+0

すぐに戻ります。クエリは1秒未満で完了します。 – epignosisx

関連する問題