25 september Toon SQL van een Entity Framework LINQ opdracht september 25, 2017door Andre Obelink Visual Basic Entity Framework, LINQ, Visual Basic 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