(Find vs First vs FirstOrDefault) or (Single vs SingleOrDefault)

Cuando se esta trabajando con colecciones en entityFramework (especialmente en el modelo Code First) y se necesita traer un objeto de la colección, es decir de la base de datos que la representa, se tienen diferentes alternativas que no siempre son tan claras para el desarrollador, cuando usar cual.  Aquí una breve explicación y recomendaciones de cada una.

Find(): Busca primero si el objeto esta dentro del contexto y si no hace una petición a la base de datos, si el objeto no existe lanza una excepción.  Recomendada en casos en los que el contexto persista en memoria como por ejemplo aplicaciones de escritorio, no tan útil en aplicaciones web donde en general el contexto no esta en memoria entre una petición y otra.

First(): Retorna el primer objeto de la colección (o consulta) si la consulta no retorna registros dispara una excepción.

FirstOrDefault(): Retorna el primer objeto de la colección o consulta, si la consulta no retorna registros devuelve null. Este es el que recomendamos en aplicaciones web y permite manejar mejor el evento de la no existencia de un registro.

Single(): Retorna el único objeto que cumple con la condición, si ningún objeto cumple con la condición dispara error, si dos objetos cumplen con la condición dispara una excepción.

SingleOrDefault: Retorna un único objeto que cumple con la condición, si ningún objeto cumple con la condición retorna null, si dos objetos cumplen con la condición dispara una excepción.

Establecer con mucha claridad cuando se debe usar cada uno de estos métodos y hacer que sea una directiva muy clara dentro de las políticas de desarrollo de las empresas ayudará enormemente a la calidad y el mantenimiento de las soluciones que se desarrollen con Entity Framework.

Juan Peláez
CTO
3Metas.

One reply on “(Find vs First vs FirstOrDefault) or (Single vs SingleOrDefault)”

Comments are closed.