2011-12-20 25 views
5

Estoy recibiendo un System.Data.SqlClient.SqlException: El servidor no pudo reanudar la transacción. Desc: 6c00000001 al ejecutar una consulta Linq-To-SQL.El servidor no pudo reanudar la transacción. Linq-To-SQL

Aquí es mi llamada repositorio:

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(); 
} 

Aquí es el SQL generado:

-- 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 

Como se puede ver que estoy creando y desechar la DataContext inmediatamente después de la consulta de bases de datos, por lo no se pueden realizar más llamadas desde el método de llamada.

Veo que hay dos consultas emitidas a la base de datos y creo que al emitir la segunda consulta a la base de datos se ha confirmado la transacción, pero Linq-To-SQL debería ser más inteligente que eso.

estoy usando .NET 4.0 y SQL Server 2008 R2 (SP1) - 10.50.2789.0

¿Alguna idea?

ACTUALIZACIÓN Dic/21/2011

Aquí es otra pieza de excepción: La transacción activa en esta sesión se han efectuado o abortado por otra sesión

ACTUALIZACIÓN Dic/30/2011

Un compañero de trabajo encontró que este problema se ha informado a Microsoft y se ha confirmado como un error, pero no se solucionará, y su recomendación es pasar a Entidad Framework.

+0

Es de solo lectura, lo que significa por cometido – Pleun

+0

¿Qué ocurre si ejecuta sin sus dataloadoptions y objectttracking más deferredloading enabled – Pleun

+0

@Pleun lea el mensaje de excepción. Dice que no pudo reanudar la transacción. Todavía recibo una excepción sin el seguimiento de objetos y la carga diferida. Cuando elimino las opciones de carga de datos, funciona bien, pero también debería funcionar con ellas. Ese es el punto para obtener la mayor cantidad de entidades relacionadas posibles en un solo viaje de base de datos. – epignosisx

Respuesta

0

Un compañero de trabajo encontró que este problema se ha informado a Microsoft y se ha confirmado como un error, pero no se solucionará, y su recomendación es pasar a Entity Framework.

-1

Demasiado tiempo para los comentarios.

Debe darse cuenta de que la carga ansiosa en linq2sql no funciona en múltiples niveles en un árbol. Entonces carga b con a y c con b no carga a-b-c de una vez.

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

Esto explica su segunda consulta adicional.

Ahora, por qué tienes la excepción, no lo sé.

+0

No tengo ningún problema con las consultas adicionales que se envían a la base de datos. Si no es posible obtener todos los datos de una sola vez, estoy de acuerdo.Sin embargo, no veo nada malo en mi consulta al estar fallando así. – epignosisx

+0

¿Puede ser un problema de tiempo de espera? ¿Qué sucede si ejecuta el SQL crudo en el servidor sql? – Pleun

+0

vuelve inmediatamente. La consulta tarda menos de un segundo en completarse. – epignosisx

Cuestiones relacionadas