2008-09-19 7 views
0

Je suis intéressé par le retour des appels de base de données effectués par LINQ to SQL vers le code .NET qui a généré l'appel. Par exemple, un administrateur de base de données peut craindre qu'un plan d'exécution en cache particulier ne fonctionne pas correctement. Si par exemple un DBA devait dire à un développeur pour traiter le code suivant ...Attacher un ID/Label au code généré par LINQ to SQL?

exec sp_executesql N'SELECT [t0].[CustomerID] 
FROM [dbo].[Customers] AS [t0] 
WHERE [t0].[ContactName] LIKE @p0 
ORDER BY [t0].[CompanyName]', 
'N'@p0 nvarchar(2)',@p0=N'c%' 

... il est pas évident que la déclaration LINQ produit l'appel. Bien sûr, vous pouvez rechercher dans la classe "Customers" dans le contexte de données générées automatiquement, mais ce ne serait qu'un début. Avec une grande application, cela pourrait rapidement devenir ingérable.

Existe-t-il un moyen de joindre un ID ou une étiquette au code SQL généré et exécuté par LINQ to SQL? En réfléchissant à haute voix, voici une fonction d'extension appelée "TagWith" qui illustre conceptuellement ce que je suis intéressé à faire.

var customers = from c in context.Customers 
       where c.CompanyName.StartsWith("c") 
       orderby c.CompanyName 
       select c.CustomerID; 

foreach (var CustomerID in customers.TagWith("CustomerList4")) 
{ 
    Console.WriteLine(CustomerID); 
} 

Si l'ID/label "CustomerList4" se retrouve dans le SQL généré automatiquement, je serais mis. Merci.

Répondre

1

Il n'existe aucun moyen public de modifier le SQL sous-jacent généré par LINQ to SQL pour implémenter une telle fonction de balisage. Vous pouvez implémenter la propriété Log de telle sorte qu'elle écrit un fichier journal de texte avec des informations de pile d'appel pour montrer quelles méthodes ont généré les instructions SQL à titre de référence.

1

Avez-vous envisagé de capturer le T-SQL avec la propriété DataContext.Log? Si vous étiez en mesure de le capturer dans un objet qui possédait également votre propriété d'étiquette, vous pourriez être en mesure de cataloguer le SQL que votre application exécute.