consulta sql con marco de entidad

¿Cómo puedo usar la consulta sql, en lenguaje sql, si usé el marco de la entidad para hacer la conexión? entendí de esto post que ObjectContext.ExecuteStoreQuery no ayudará porque solo funciona con algunas consultas (no 1: 1 para el lenguaje sql).

La otra opción mencionada allí es usar ObjectContext.Connection y escribir código ADO.NET "clásico" desde allí, pero no puedo entender cómo.

¿Puede alguien escribir un ejemplo de código muy simple? ¿Cómo puedo realizar una consulta simple como

select MAX(customer_id) from Customers 

con el marco de la entidad? Sé que existen Linq-To-Sql, pero prefiero usar el lenguaje sql, me parece más simple y estoy más familiarizado con él.

preguntado el 12 de junio de 12 a las 18:06

2 Respuestas

utilizar el Database.SqlQuery método para ejecutar SQL queries

var maxId= context.Database.
           SqlQuery<int>("select MAX(customer_id) from Customers")
                                                              .SingleOrDefault();

Esto debería funcionar asumiendo context en tu DataContext objeto de clase.

Respondido el 12 de junio de 12 a las 18:06

¿Por qué aparece el error "mydbEntities" no contiene una definición para "Base de datos"? - BornToCode

Estoy usando .net 4, agregué el uso de System.Data.Linq.dll. - BornToCode

Reside en el espacio de nombres System.Data.Entity. ¿Agregaste esa declaración using ? - Shyju

sí, y antes escribí: DataContext context2 = new DataContext(MainForm.eggsContext.Connection); var maxId = context2.Database.SqlQuery ("seleccione MAX(customer_id) de Clientes").SingleOrDefault(); - BornToCode

entonces donde esta mydbEntities procedente de ? - Shyju

No es una respuesta, pero tengo que...

prefiero usar lenguaje sql

¡Hágase un favor y "olvídese" de SQL! Linq realmente no es tan difícil. SQL en literales de cadena es un infierno de mantenimiento. Linq tiene un tipo fuerte, por lo que el compilador lo protege contra la corrupción del código. Tienes intellisense, mucho menos código ceremonial, es mucho más fácil expresar consultas complejas. Y así sucesivamente y así sucesivamente.

Su declaración es pan comido en Linq.

context.Customers.Max(c => c.customer_id)

Bueno, solo un consejo :D

Respondido el 12 de junio de 12 a las 20:06

en realidad, también esperaba obtener ese tipo de respuesta, porque me siento un poco primitivo al no usar Linq y quería ver las opiniones de otras personas :) pero tengo un proyecto con una fecha límite y será mucho más fácil hazlo con algo familiar que adivinar cómo debería escribirse en Linq.. - BornToCode

Ah, así es la vida. Pero después de eso: adelante a todo vapor con Linq, ¿verdad? - gert arnold

si nadie aquí va a resolver mi problema pronto, es posible que me vea obligado a seguir adelante con Linq ahora ... :) Pero todavía tengo miedo de unirme a mesas o realizar consultas complicadas con Linq: BornToCode

Creo que puedes usar ExecuteStoreQuery después de todo. MSDN estados: "utiliza la conexión existente para ejecutar un arbitrario comando directamente contra la fuente de datos." (énfasis mío). PERO debe tener cuidado de que las columnas en la consulta coincidan con las propiedades del tipo especificado por TElement. - gert arnold

Jeje, no, no podemos. El SQL generado por un ORM no puede competir con las declaraciones SQL optimizadas y creadas manualmente. Por supuesto, cuando el rendimiento es crítico, no queremos depender de estas consultas ORM. - gert arnold

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.