Tôi nhận được một hệ thống .Data.SqlClient.SqlException: Máy chủ không thể tiếp tục giao dịch. Mô tả: 6c00000001 khi thực hiện truy vấn LINQ-To-SQL.Máy chủ không thể tiếp tục giao dịch. LINQ-To-SQL
Đây là cuộc gọi kho của tôi:
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();
}
Đây là SQL tạo:
-- 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
Như bạn có thể thấy tôi là tạo ra và xử lý các DataContext ngay sau khi truy vấn cơ sở dữ liệu, vì vậy không có cuộc gọi nào khác có thể được thực hiện từ phương thức gọi.
Tôi thấy rằng có hai truy vấn được phát hành cho cơ sở dữ liệu và dự đoán của tôi là khi phát hành truy vấn thứ hai tới cơ sở dữ liệu giao dịch, nhưng LINQ-To-SQL phải thông minh hơn.
Tôi đang sử dụng .NET 4.0 và SQL Server 2008 R2 (SP1) - 10.50.2789.0
Bất kỳ ý tưởng nào?
CẬP NHẬT Dec/21/2011
Dưới đây là một mảnh của ngoại lệ: Giao dịch tích cực trong phiên này đã được cam kết hoặc hủy bỏ bởi phiên khác
CẬP NHẬT Dec/30/2011
Một đồng nghiệp phát hiện ra rằng vấn đề này đã được báo cáo cho Microsoft và nó đã được xác nhận là lỗi nhưng nó sẽ không được sửa, và đề xuất của họ là chuyển sang Khung thực thể.
Chỉ đọc, ý nghĩa của cam kết – Pleun
Điều gì sẽ xảy ra nếu bạn thực thi mà không cần tải dữ liệu và đối tượng đính kèm đã được kích hoạt – Pleun
@Pleun vui lòng đọc thông báo ngoại lệ. Nó nói rằng nó không thể tiếp tục giao dịch. Tôi vẫn nhận được ngoại lệ mà không cần theo dõi đối tượng và tải chậm. Khi tôi loại bỏ các tùy chọn tải dữ liệu thì nó hoạt động tốt, nhưng nó cũng làm việc với chúng. Đó là toàn bộ vấn đề để có được nhiều sự liên quan có liên quan nhất có thể trong một chuyến đi cơ sở dữ liệu duy nhất. – epignosisx