ja dostaję System.Data.SqlClient.SqlException: Serwer nie może wznowić transakcji. Opis: 6c00000001 podczas wykonywania kwerendy Linq-To-SQL.Serwer nie mógł wznowić transakcji. LINQ-SQL
Oto moje wezwanie repozytorium:
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();
}
Oto SQL generowane:
-- 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
Jak widać tworzę i utylizacją DataContext zaraz po zapytaniu do bazy danych, tak z metody wywołującej nie można nawiązywać połączeń.
Widzę, że są dwa kwerendy wydane do bazy danych i domyślam się, że podczas wydawania drugiego zapytania do bazy danych transakcja została zatwierdzona, ale Linq-To-SQL powinien być mądrzejszy.
Używam .NET 4.0 i SQL Server 2008 R2 (SP1) - 10.50.2789.0
Jakieś pomysły?
UPDATE DEC/21/2011
Oto kolejny kawałek z wyjątkiem: Transakcja aktywny w tej sesji zostało popełnione lub przerwana przez inną sesję
UPDATE DEC/30/2011
współpracownik stwierdził, że kwestia ta została zgłoszona do firmy Microsoft i zostało potwierdzone jako błąd, ale nie zostanie rozwiązany, a ich rada jest taka, aby przejść do Entity Framework.
Jest to tylko do odczytu, co oznacza zatwierdzony – Pleun
Co się stanie, jeśli wykonasz bez opcji dataloadoptions i objectttracking plus deferredloading włączone – Pleun
@Upun proszę przeczytać komunikat o wyjątku. Mówi, że nie może wznowić transakcji. Nadal otrzymuję wyjątek bez śledzenia obiektów i odroczonego ładowania. Po usunięciu opcji ładowania danych działa dobrze, ale powinno również działać z nimi. W tym przypadku chodzi o to, aby zdobyć jak najwięcej powiązanych obiektów w jedną podróż do bazy danych. – epignosisx