Comparteix a través de


Cómo funcionan las consultas

Entity Framework Core usa Language Integrated Query (LINQ) para consultar datos de la base de datos. LINQ permite usar C# (o el lenguaje .NET que prefiera) para escribir consultas fuertemente tipadas en función del contexto derivado y las clases de entidad.

Nota:

Este artículo no está actualizado y algunas partes de él deben actualizarse para tener en cuenta los cambios ocurridos en el diseño de la canalización de consultas. Si tiene alguna duda sobre cualquier comportamiento mencionado aquí, por favor haga una pregunta.

La vida útil de una consulta

La descripción siguiente es una introducción general de alto nivel del proceso que pasa cada consulta.

  1. Entity Framework Core procesa la consulta LINQ para crear una representación lista para procesarla el proveedor de base de datos.
    1. El resultado se almacena en caché para que este procesamiento no sea necesario realizar cada vez que se ejecuta la consulta.
  2. El resultado se pasa al proveedor de base de datos.
    1. El proveedor de base de datos identifica qué partes de la consulta se pueden evaluar en la base de datos.
    2. Estas partes de la consulta se traducen al lenguaje de consulta específico de la base de datos (por ejemplo, SQL para una base de datos relacional).
    3. Se envía una consulta a la base de datos y el conjunto de resultados devuelto (los resultados son valores de la base de datos, no las instancias de entidad).
  3. Para cada elemento del conjunto de resultados
    1. Si la consulta es una consulta de seguimiento, EF comprueba si los datos representan una entidad que ya está en el seguimiento de cambios de la instancia de contexto.
      • Si es así, se devuelve la entidad existente.
      • Si no es así, se crea una nueva entidad, se configura el seguimiento de cambios y se devuelve la nueva entidad.
    2. Si la consulta es una consulta sin seguimiento, siempre se crea una nueva entidad y se devuelve.

Cuando se ejecutan consultas

Al llamar a los operadores LINQ, básicamente está creando una representación en memoria de la consulta. La consulta solo se envía a la base de datos cuando se consumen los resultados.

Las operaciones más comunes que dan lugar a la consulta que se envía a la base de datos son:

  • Iteración de los resultados en un for bucle
  • Uso de un operador como ToList, ToArray, Single, Counto las sobrecargas asincrónicas equivalentes

Advertencia

Valide siempre la entrada del usuario: Aunque EF Core protege contra ataques por inyección de CÓDIGO SQL mediante parámetros y literales de escape en consultas, no valida las entradas. La validación adecuada, según los requisitos de la aplicación, debe realizarse antes de que los valores de orígenes que no sean de confianza se usen en consultas LINQ, asignadas a propiedades de entidad o pasadas a otras API de EF Core. Esto incluye cualquier entrada de usuario utilizada para construir consultas dinámicamente. Incluso al usar LINQ, si acepta entradas de usuario para compilar expresiones, debe asegurarse de que solo se pueden construir expresiones deseadas.