2011-02-04 27 views
7

Consulta de un modelo conceptual.Entity Framework Entity SQL vs Query builder methods

Sé que en EF existe 3 opción para consultar:

  • LINQ to Entidad
  • Entity SQL
  • de consulta métodos constructor

Aquí un ejemplo de código para los dos últimos:

#region Query Entity Sql 
string queryJob4 = @"SELECT VALUE myJobs FROM CmsJobs AS myJobs WHERE myJobs.JobId = @id"; 
ObjectQuery<CmsJob> queryJobs4 = new ObjectQuery<CmsJob>(queryJob4, context); 
queryJobs4.Parameters.Add(new ObjectParameter("id", 58)); 
#endregion 

#region Query Builder method 
ObjectQuery<CmsJob>queryJob5 = context.CmsJobs.Where("it.JobId == @id", new ObjectParameter("id",66)); 
#endregion 

I woul me gustaría saber:

  • ¿En qué entorno es más apropiado de una forma a otra y por qué?
  • ¿Qué usas y por qué?

Gracias chicos por sus opiniones!

Respuesta

3

Linq to Entity es la forma más fácil de generar la mayoría de las consultas y está fuertemente tipada, por lo que si pudiera usar Linq To Entity, usaría esto como la primera opción. Sin embargo, hay ciertas situaciones en las que no puede usar Linq para Entity, luego debe usar los métodos de Entity SQL o Query Builder.

Un punto es que si desea utilizar Entity Framework fuera de los programas VB o C#, es posible que no pueda usar LINQ para las entidades.

+0

preste atención a que la compilación de la expresión Liq to Entity también tiene un costo. Entity SQL redujo ese costo. – VdesmedT

+0

@VdesmedT: [citación necesitada]. ¿Quiere sugerir que EF favorece Entity SQL sobre todos los demás y convierte internamente consultas de tipo estáticamente de Linq-to-Entites en una cadena Entity SQL y luego procede a analizar y recompilar esa cadena BACK en una expresión de árbol de comandos para su ejecución? Eso me parece un poco exagerado, pero solo estoy preguntando si tienes una fuente para respaldar esa afirmación. –

+1

"Las consultas contra Entity Framework están representadas por consultas de árbol de mandatos, que se ejecutan contra el contexto del objeto. LINQ to Entities convierte consultas de consultas integradas en lenguaje (LINQ) a consultas de árbol de comandos, ejecuta las consultas en Entity Framework y devuelve objetos puede ser utilizado tanto por Entity Framework como por LINQ ". [fuente] (http://msdn.microsoft.com/en-us/library/bb386964.aspx). En ninguna parte eso implica que las consultas de LINQ-a-Entidades se conviertan en Entity SQL, por lo que no veo cómo se puede afirmar que Entity SQL puede ser menos costoso. –

2

La mayor parte de mi código usa Linq porque de eso se trata esencialmente EF. Voy a cambiar a mi propio SQL solo si sospecho que EF puede generar consultas que no son lo suficientemente eficaces. Mi opinión es que si escribe más cosas de QueryBuilder que utilizando Linq, EF podría ser la tecnología incorrecta para ese proyecto en particular. HTH.