Entity Framework : Log ?

Le 22 septembre 2009 à 10:07

Avec Linq To Sql, on a l’habitude, en phase de débogage, d’utiliser le code suivant :

AdventureWorksData context = new AdventureWorksData();
context.Log = Console.Out;

Le log nous permet de voir toutes les requêtes qui sont générées par Linq To Sql. Donc, avec le code suivant, nous aurons en console la requête générée :

AdventureWorksData context = new AdventureWorksData();
context.Log = Console.Out;

var query = from p in context.Product
            where p.Color.Equals("Black")
            select p;

foreach (var q in query)
{
    Console.WriteLine(q.ProductID);
}

Console.Read();

// Requête générée envoyée dans la console
SELECT [t0].[ProductID], [t0].[Name], [t0].[ProductNumber], 
       [t0].[MakeFlag], [t0].[FinishedGoodsFlag], [t0].[Color],
       [t0].[SafetyStockLevel], [t0].[ReorderPoint],
       [t0].[StandardCost], [t0].[ListPrice], [t0].[Size], 
       [t0].[SizeUnitMeasureCode], [t0].[WeightUnitMeasureCode],
       [t0].[Weight], [t0].[DaysToManufacture], [t0].[ProductLine],
       [t0].[Class], [t0].[Style], [t0].[ProductSubcategoryID], 
       [t0].[ProductModelID], [t0].[SellStartDate], [t0].[SellEndDate],
       [t0].[DiscontinuedDate], [t0].[rowguid], [t0].[ModifiedDate]
FROM [Production].[Product] AS [t0]
WHERE [t0].[Color] = @p0

Avec EF, cela ne se met plus en place tout à fait de la même manière. Nous pouvons faire le log avec ObjectQuery.ToTraceString(). Voici l’exemple ci-dessus remodelé pour EF et ToTraceString() :

AdventureWorksEntities context = new AdventureWorksEntities();

var query = from p in context.Product
            where p.Color.Equals("Black")
            select p;

// Affiche la requête
Console.WriteLine(context.Product.ToTraceString());

foreach (var q in query)
{
    Console.WriteLine(q.ProductID);
}

Console.Read();

// Requête générée
SELECT
[Extent1].[ProductID] AS [ProductID],
[Extent1].[Name] AS [Name],
[Extent1].[ProductNumber] AS [ProductNumber],
[Extent1].[MakeFlag] AS [MakeFlag],
[Extent1].[FinishedGoodsFlag] AS [FinishedGoodsFlag],
[Extent1].[Color] AS [Color],
[Extent1].[SafetyStockLevel] AS [SafetyStockLevel],
[Extent1].[ReorderPoint] AS [ReorderPoint],
[Extent1].[StandardCost] AS [StandardCost],
[Extent1].[ListPrice] AS [ListPrice],
[Extent1].[Size] AS [Size],
[Extent1].[SizeUnitMeasureCode] AS [SizeUnitMeasureCode],
[Extent1].[WeightUnitMeasureCode] AS [WeightUnitMeasureCode],
[Extent1].[Weight] AS [Weight],
[Extent1].[DaysToManufacture] AS [DaysToManufacture],
[Extent1].[ProductLine] AS [ProductLine],
[Extent1].[Class] AS [Class],
[Extent1].[Style] AS [Style],
[Extent1].[ProductSubcategoryID] AS [ProductSubcategoryID],
[Extent1].[ProductModelID] AS [ProductModelID],
[Extent1].[SellStartDate] AS [SellStartDate],
[Extent1].[SellEndDate] AS [SellEndDate],
[Extent1].[DiscontinuedDate] AS [DiscontinuedDate],
[Extent1].[rowguid] AS [rowguid],
[Extent1].[ModifiedDate] AS [ModifiedDate]
FROM [Production].[Product] AS [Extent1]

On remarquera qu’à la différence avec Linq to Sql, il faut définir exactement quelle requête nous voulons voir.

Bien sûr, si vous utilisez SQL Server, vous pouvez aussi utiliser SQL Profiler, pour avoir un monitoring plus “poussé”. Pour les autres bases de données, il existe aussi des outils équivalents.

Ajouter un commentaire

biuquote
  • Commentaire
  • Prévisualiser
Loading

A propos de l'auteur

Mathieu Perrein - Software Solutions Manager, Software Architect, Trainer MCT, MSP de 2010 à 2012.

 

MSP

 

MSP

MSP

 MSPD

MCT

 

Facebook

 

Ce blog est strictement personnel et les opinions exprimées ici n'engagent donc que moi, et pas mon employeur.

Tags

Vous avez désactivé JavaScript ou bien vous possédez une ancienne version d'Adobe Flash Player. Téléchargez la dernière version de Flash Player.