Toon SQL van een Entity Framework LINQ opdracht

Wanneer je LINQ queries afvuurt tegen een Entity Framework DbContext hoef je je eigenlijk niet druk te maken over de feitelijke SQL die wordt gegenereerd en toegepast. In sommige gevallen kun je echter wel geïnteresseerd zijn in deze SQL. Het is vrij eenvoudig om de daadwerkelijke SQL te tonen in je Debug venster. Het enige wat je moet doen is een actie toekennen aan de DbContext.Database.Log property. In feite definieer je met behulp van een lambda expressie wat je wilt doen. Je zou er bijvoorbeeld ook voor kunnen kiezen om de uitvoer naar een tekstbestand te loggen, of bijvoorbeeld naar het Klembord.

 
Imports System.Data.Entity 
  
Module MainModule 
   
    Private ReadOnly MyContext As New MyContext 
   
    Sub Main() 
   
      MyContext.Database.Log = Sub(x) 
                                   Debug.WriteLine(x) 
                               End Sub 
   
      Dim result = MyContext.Patients.Include(Function(x) x.Dossiers). 
                      Select(Function(x) 
                            New With {.PatientId = x.PatientID, 
                                      .LastName = x.LastName, 
                                      .DossierCount = x.Dossiers.Count}).ToList() 
   
    End Sub 
   
End Module 


In dit voorbeeld, waarbij ik geïnteresseerd ben in enkele eigenschappen van Patient in combinatie met het aantal Dossiers dat aan deze patiënt gekoppeld is, zie je de volgende SQL in het Debug venster te voorschijn komen.

 
SELECT 
    [Extent1].[PatientID] AS [PatientID], 
    [Extent1].[LastName] AS [LastName], 
    (SELECT 
        COUNT(1) AS [A1] 
        FROM [dbo].[Dossier] AS [Extent2] 
        WHERE [Extent1].[PatientID] = [Extent2].[PatientID]) AS [C1] 
    FROM [dbo].[Patient] AS [Extent1] 


Ik heb deze post eerder in het Engels gepubliceerd op mijn eigen blog: www.obelink.com

Nieuwsbrief

Blijf op de hoogte van alles wat op VBcentral gebeurd. Meld je nu aan voor onze nieuwsbrief! »

Over ons

Wij zijn gek op het Microsoft .NET ontwikkelplatform en haar ontwikkeltalen, maar we hebben een sterke voorkeur voor Visual Basic .NET! »

Neem contact op

VBcentral.nl
Bataafseweg 20
7101 PA Winterswijk
Nederland
+31 (543) 538 388
info@vbcentral.nl