Del curso: .NET 7: Entity Framework Core Esencial

Ejecución de consultas y comandos Transact-SQL

Hay veces que es necesario consultar la base de datos directamente por medio de la ejecución de sentencias Transact-SQL, ya sea porque quieres tener total control o porque probablemente es así tu aplicación que estás construyendo. Veamos cómo podemos hacer esto por medio del Entity Framework. Aquí lo que voy a hacer es borrar todo este código que no vamos a utilizar y posteriormente lo que voy a hacer es invocar en el 'DbSet' que estoy interesado en consultar en este caso, digamos 'Pets', aquí vamos a encontrar diversos métodos que podemos usar para hacer esto. Estos se llaman 'FromSql', 'FromSqlInterpolated' y 'FromSqlRaw'. Veamos cómo funcionan algunos de estos. Aquí voy a utilizar 'FromSqlRaw' para ejecutar la siguiente sentencia. Lo que voy a hacer es pasarle la sentencia de Transact-SQL que exprese la consulta que quiero ejecutar, en este caso 'SELECT * FROM Pets WHERE' mayor que 20 digamos. En este caso, como podrás observar, entonces, estoy trayéndome todas las mascotas que tengan la edad mayor de 20 años. Ahora recuerda que este es el «query» como tal, sigue necesitando el 'ToList' para poder ejecutar dicha sentencia en la base de datos y, por lo tanto, esto lo podemos poner en una variable y posteriormente leer esta colección. Vamos a utilizar 'foreach (var item in pets)' y lo que voy a hacer es simplemente mostrar aquí por medio de 'ConsoleWriteLine' este 'item . Name'. Perfecto. Entonces, vamos a ejecutar la aplicación. Y, como podemos observar, aquí en esta ventana de resultados efectivamente tengo estas mascotas que son mayores de 20 años, es decir, Bugs Bunny y Roger Rabbit entran en este conjunto de resultados. Bien. Vámonos de regreso a Visual Studio, ya que quiero mostrarte el uso del otro método que se llama 'FromSql Interpolated'. Este método espera una cadena interpolada y, de hecho, está preparado para entender dichas cadenas interpeladas y, de hecho, poder crear parámetros de forma dinámica y evitarnos la inyección de SQL, que es un ataque informático bastante conocido, que, claro, está fuera del alcance del temario de este curso. Sin embargo, para eso sirve este método 'FromSqlInterpolated'. Bien. Entonces, aquí lo que voy a hacer es... De hecho, vamos a hacer otro bloque para no borrar este. Vamos a guardar esto así como está y entonces vamos a escribir lo siguiente. Vamos a cerrar esto correctamente. Vamos a escribir (voy a hacer «scroll» para que esto se vea correctamente) 'db.Pets.FromSqlInterpolated' y ahora voy a poner, pues, digamos, una consulta muy similar pero en este caso voy a poner una interpolación de cadenas. Vamos a utilizar esta interpolación 'WHERE Age', en este caso vamos a ponerle mayor que o igual que, y aquí está la interpolación. Vamos a ponerle el valor que nosotros estemos esperando, en este caso digamos 20 también, ya que no estoy recibiendo ningún tipo de parámetro. Claro, esto lo pudiese yo poner en algún método estático y recibir un argumento y usarlo aquí directamente, pero en este caso es suficiente que hagamos esto. Muy bien. Entonces, nuevamente 'ToList', esto lo ponemos en 'Pets' y de nueva cuenta estamos listos para hacer esta iteración sobre 'Pets'. Y cada iteración aquí voy a ponerle que estemos mandando a la consola el nombre del 'Pet'. Muy bien. Vamos a probar nuevamente y, como podemos observar, efectivamente aquí están estos 'Pet' que tienen la edad mayor que o igual que 20. Antes de finalizar veamos cómo se ejecuta esta consulta que está utilizando una cadena intercalada por medio de SQL Server Profiler. Bien. Aquí tengo nuevamente Visual Studio y he abierto el Profiler aquí de lado a lado para poder ver cuál es este comando que se está enviando. Vamos a iniciar la aplicación. Aquí inicia y en la parte del Profiler podemos ver que tenemos este evento llamado 'RPC:Completed' y justamente se está parametrizando el valor de 20 y se está usando aquí en esta sentencia de 'SELECT'. Justamente esta es la diferencia entre 'FromSqlRaw' y 'FromSqlInterpolated', que este segundo método está preparado para entender la interpolación de cadenas y poder crear estos parámetros de forma adecuada.

Contenido