16juil. 2009

Linq To Entity : voir la traduction SQL des requêtes

Je rencontre un gros problème avec Entity et Linq, je ne parviens pas à récupérer dans un fichier journal les requête SQL qui sont exécutée.

Il est possible lorsque l'on utilise Linq To SQL de passer par le DataContext pour logger automatiquement les requêtes transmises à la base de données.

Cela est possible car le contexte de données que vous créez pour votre base hérite de la classe DataContext. Chose qui n'est pas le cas lorsqu'on utilise un modèle de donnée Entity. N'oublions pas qu'avec Entity, c'est le modèle généré qu'on interroge.

Et c'est le drame. Le contexte de données du modèle hérite d'ObjectContext et non de DataContext qui ne donne pas de possibilité d'abonner un gestionnaire de Log.

La méthode larrache

Il existe une "technique de pro" issu du blog de Tom Fischer que voici :

using (var ctx = new MyDBEntities())
{
    var query = from ev in ctx.Events
                select ev;
    var query2 = query as ObjectQuery<Event>;
    Console.WriteLine(query2.ToTraceString());
}

C'est moche, ce n'est pas automatisé et le pire, ca déclenche l'exécution de la requête !

La méthode nucléaire

Utiliser SQL profiler sur le serveur. Là tout va bien vous voyez tout ce qui se passe. Petit soucis il faut aller gentiment demandé à votre DBA de bien vouloir vous donner un compte des droits etc ... .

Le moindre dégat

C'est la méthode que vous pouvez voir dans le deuxième lien de la partie source. Je n'ai pas le temps de la détaillé ici. Je complèterai l'article ASAP.

Sources

aucun commentaire

Fil des commentaires de ce billet

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.