Hay una diferencia significativa entre .Find(id) y .Where(x = >x.Id == id) que debe obligar a que me uso .Find() más de .Where()/.First()?

Me imagino que .Find() sería más eficiente, pero es mucho más eficiente que debería evitar .Where()/.First()?

La razón que pido es que estoy usando un genérico FakeDbSet en mis pruebas para que sea fácil de implementar los resultados falsos y hasta ahora he encontrado que me debe heredar de la clase proporcionar una implementación personalizada de .Find() mientras que si escribo mi código con .Where()/.First() no necesito hacer ese trabajo extra.

  • Así que probablemente estaría mejor fuera de la comparación de Find y SingleOrDefault, desde Where devuelve colecciones.
  • Cierto, aunque yo siempre uso .Primer o .FirstOrDefault.
  • puede que desee considerar el uso de una Sola, para cualquier situación donde sólo el 1 registro debe coincidir.
InformationsquelleAutor Jimmy Bosse | 2013-06-06

1 Comentario

  1. 42

    El punto es que find se inicia la búsqueda en la caché local del contexto y a continuación, si no coinciden, se envía una consulta a la db.

    where siempre envía una consulta a la db.

    Con EF 4.*, Yo solía pensar que el sql generado por find era demasiado complejo y, en algunos casos, conduce a un problema de rendimiento. Así que yo siempre uso where incluso con EF 5. Que debía ver el sql generado por find con EF 5.

    Por lo que en el papel, find es mejor porque él utiliza la caché.

    • +1. Encuentre también no tiene la sobrecarga de la visita de un árbol de expresión, por lo que puede golpear la base de datos más rápido, si pega la base de datos. Donde siempre pasa a través de un ExpressionVisitor.
    • No puedo obtener datos incorrectos, debido a la caché? Es decir Db se actualiza en segundo plano?
    • Sí, sí puede. Usted también puede tener la concurrencia acces problema en la actualización de un registro después de recogerla, o debido a que el nivel de aislamiento o… 🙂

Dejar respuesta

Please enter your comment!
Please enter your name here