2010-10-28 32 views
10

Como dice el título, ¿cómo veo el SQL generado por Entity Framework desde mi código? Me encuentro con un error donde el EF se cuelga porque la base de datos genera un campo (un campo DateTime), y pensé que lo configuré para saber que la tienda lo está generando a través de StoreGeneratedPattern, pero todavía está fallando, así que Me gustaría ver qué es exactamente lo que está tratando de impulsar a la base de datos.¿Cómo ver SQL generado desde Entity Framework?

P.S. Solo he usado EF durante una hora aproximadamente ... Cambiando de L2S.

Respuesta

16

Dado que no tiene Sql Profiler, su mejor opción sería LINQPad. Puede usar su ensamblaje existente.

Haga clic en Add connection ->Use a typed data context from your own assembly ->Entity framework y seleccione su dll.

Puede escribir consultas directamente en su modelo (o copiar y pegar desde su código). Seleccione la 'pestaña' SQL debajo de la ventana de consulta para ver el código SQL generado.

+0

En el contexto de mi pregunta, usted tiene la mejor solución. Funciona a las mil maravillas. ¡Gracias! – Gup3rSuR4c

+0

¡Gracias! Esta es la mejor solución gratuita y simple. – Funbit

2

Una solución sería capturar el tráfico de la red y echar un vistazo a los datos en ese nivel. Microsoft Network Monitor hace un buen trabajo de esto.

Por supuesto, eso solo funciona si está usando un servidor de bases de datos separado, y la conexión no está encriptada.

3

Por lo general, siempre se debe utilizar SQL para ver las sentencias SQL que están expuestos por EF en su base de datos.

Además, creo que no entendió lo que StoreGeneratedPattern es. Si observa sus valores posibles dentro del modelo, verá que tiene identidad lo que significa que el valor será generado (por la base de datos) cuando se inserta la fila y no cambiará de otra manera. Las otras opciones son computarizada, que especifica que el valor se generará en las inserciones y actualizaciones, y Ninguno, que es el valor predeterminado.
Así que EF no generará ese campo DateTime sobre la marcha para usted, debe crearlo manualmente y luego actualizar su modelo desde la base de datos para que EF genere los metadatos apropiados para trabajar con él en tiempo de ejecución.

+0

No tengo el perfilador instalado, y no lo veo como una característica que puedo agregar al volver a ejecutar la configuración, por lo que, lamentablemente, es un callejón sin salida. En cuanto a 'StoreGeneratedPatern', estoy bastante seguro de haberlo entendido correctamente cuando lo leí en MSDN. A menos que * Identity * esté destinado solo para columnas PK y nada más. – Gup3rSuR4c

+0

De cualquier manera, ¿cómo puedo superar el problema de EF bloqueando valores generados en la base de datos? – Gup3rSuR4c

+0

Bien, primero debe decirme acerca de su enfoque: ¿Tiene una base de datos existente y crea un modelo basado en ella o está siguiendo un enfoque de modelo primero? –

5

Puede usar el Entity Framework Profiler (EFProf). No es gratis, pero hay una versión de prueba de 30 días disponible. Hace mucho más cosas ordenadas además de mostrarte las declaraciones de SQL.

+1

¿Por qué el voto a favor? –

+0

Es una herramienta práctica, excepto que tiene que modificar su código y agregar una referencia para que la herramienta funcione bien. – Chris

3

El AnjLab Sql Profiler gratuito funcionará si SQL Profiler real no está disponible porque está utilizando SQL Server Express: http://anjlab.com/en/projects/opensource/sqlprofiler. No es tan agradable como la realidad, pero hace el trabajo lo suficientemente bien.

+0

Ya no se puede encontrar, se comercializó. – Nenotlep

Cuestiones relacionadas