32 votes

Dans EF 4.1 DbContext, comment tracer le SQL généré

Je me demande comment tracer le SQL généré comme DataContext dans LinqToSql.

J'ai également lu des articles sur la solution EFProviderWrapper sur le blog de Jaroslaw Kowalski, mais basé sur ObjectContext, il ne fonctionne pas pour DbContext.

Quelqu'un sait comment faire cela dans DbContext?

Merci.

16voto

Slauma Points 76561

Le moyen le plus simple avec DbContext et DbSet<T> consiste simplement à utiliser ToString() sur le IQueryable vous avez construit. Par exemple:

 var query = context.Blogs.Include(b => b.Posts)
                   .Where(b => b.Title == "AnyTitle");

string sql = query.ToString();
 

sql contient la commande SQL qui sera émise vers la base de données lorsque la requête sera exécutée.

1voto

Chance Points 376

MVC-Mini-Profiler est un outil précieux, non pas une seule trace générée par SQL, mais également un outil de profilage.

Utilisation du profilage de la base de données mvc-mini-profiler avec Entity Framework Code First

0voto

JK. Points 5517

J'utilise l'outil de profilage SQL Server pour voir exactement ce que SQL a été créé. Il y a aussi http://efprof.com/ mais le prix est assez élevé.

0voto

Scott Munro Points 4008

Vous pouvez utiliser le ObjectQuery.ToTraceString méthode pour afficher stocker les commandes (instructions SQL par exemple). Le Comment sur MSDN va vous montrer comment il peut être utilisé.

Notez que dans de nombreux cas, vous serez en mesure de jeter un IQueryable (le type de retour de Linq extension des méthodes telles que IQueryable.Où) à un ObjectQuery de sorte que vous avez accès à la méthode ToTraceString.

0voto

James Close Points 244

J'ai trouvé cette extension EFTracingProvider pour ObjectContext ici:

http://efwrappers.codeplex.com/

Mais l'exemple concerne ObjectContext et non DbContext. Pour le faire fonctionner avec DbContext, procédez comme suit dans le constructeur:

 Public Sub New()
  MyBase.New(EFTracingProviderUtils.CreateTracedEntityConnection("MyDbConnection"), True)
  Dim context As ObjectContext = CType(Me, IObjectContextAdapter).ObjectContext
  context.EnableTracing()
End Sub
 

Oh et n'oubliez pas de définir la configuration:

 <?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.diagnostics>
    <sources>
      <source name="EntityFramework.MyDbConnection" switchValue="All" />
    </sources>
 </system.diagnostics>
 

Cela trace ensuite tout le SQL à la fenêtre immédiate.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X