¿Es posible ejecutar consultas SQL personalizadas utilizando EF7?

c# entity-framework-core

Pregunta

Decidí trasladar uno de mis proyectos a Entity Framework 7 (rc1-final). Estoy apuntando a SQL Server y el paquete EntityFramework.MicrosoftSqlServer también está instalado.

Solo tengo un problema: parece que no puedo ejecutar consultas SQL personalizadas para recuperar algunos objetos de la base de datos.

DatabaseFacade objeto DatabaseFacade (al que se puede acceder a través de la propiedad DbContext.Database ) proporciona un método de extensión ExecuteSqlCommand (que no devuelve nada), pero no proporciona el SqlQuery<T> que permite recuperar objetos. Ambos métodos estaban disponibles en el antiguo EF 6, pero el nuevo EF 7 declara solo el primero.

Entonces, ¿el método SqlQuery<T> todavía está aquí (pero se ha movido / renombrado) o se eliminó por completo de la nueva implementación de EF?

Por supuesto, es absolutamente posible resolverlo de manera detallada (utilizando SqlCommand y su método ExecuteReader ) pero prefiero evitarlo.

Respuesta aceptada

EntityFramework.Relational expone el siguiente método de extensión;

public static IQueryable<TEntity> FromSql<TEntity>(
        [NotNull] this IQueryable<TEntity> source,
        [NotNull] [NotParameterized] string sql,
        [NotNull] params object[] parameters)
        where TEntity : class

Así que puedes hacer esto;

public static IQueryable<TEntity> FromSql<TEntity>(
        [NotNull] this IQueryable<TEntity> source,
        [NotNull] [NotParameterized] string sql,
        [NotNull] params object[] parameters)
        where TEntity : class

Respuesta popular

Para ejecutar una consulta SQL de custome en EF7, puede crear una tabla "falsa" cuya estructura como la estructura de su consulta SQL devuelve.

Ejemplo: Su consulta es: "seleccione aA, bB de A, B donde a.b_id = b.id" . La tabla falsa contendrá 2 columnas como A, B. En tu programa, puedes hacer esto:

var result = myDatabaseContext.FakeTables.FromSql("select a.A, b.B from A,B where a.b_id=b.id");



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué