2011-12-16 14 views
5

Estoy trabajando con Entity Framework por un tiempo, pero aún tengo algunos "agujeros negros" con la forma en que funciona bajo el capó. Incluso después de leer un par de artículos, no estoy seguro de que mi comprensión sea correcta.Entender EF bajo el capó. Incluir vs Uniones


Vamos a empezar con las preguntas:

  • Cómo EF Incluir está trabajando bajo el capó?
  • ¿Cuáles son las diferencias entre Join and Include?
  • Problemas de rendimiento con Include (carga diferida vs carga ansiosa, consultas SQL generadas, etc.)?
  • Cuándo debería usar Join in Include y viceversa?

Respuesta

9

Al consultar EF a través de expresiones linq o lambda, solo necesita declaraciones join si el esquema subyacente no proporciona FK y, por lo tanto, no tiene propiedades de navegación en los objetos.

Por otro lado, incluir (carga ansiosa) y la carga lenta solo pueden funcionar si hay FK porque usa las propiedades de navegación.

El sql subyacente en ambos casos utilizará combinaciones (ya que sql no tiene el concepto de "propiedad de navegación").

En cuanto al rendimiento, depende de las situaciones. La carga diferida frente a la carga ansiosa (por lo tanto, en el escenario FK) puede ser una elección difícil.

Normalmente utilizo la carga diferida, útil cuando tiene un resultado principal grande, pero necesita datos "unirse" solo de algunos elementos del conjunto de resultados completo.

Si sabe que necesitará los datos de la unión de todo el conjunto de resultados, la carga ansiosa podría ser mejor para el rendimiento. Sugeriría experimentar y ver por ti mismo.

+0

Gracias por responder, pero todavía necesito algo más preciso. –

+0

¿Qué sucede si ha agregado propiedades de navegación manualmente sin claves externas subyacentes? Incluirá el trabajo como se esperaba o no? – Dan

Cuestiones relacionadas