Tutorial de Entity Framework Core Series-23-Native SQL Query

Ejecutar consulta SQL nativa en Entity Framework Core

Entity Framework Core proporciona el método DbSet.FromSql () para realizar consultas SQL sin procesar en la base de datos subyacente y obtener los resultados como objetos de entidad.
El siguiente ejemplo muestra cómo ejecutar una consulta SQL sin procesar en la base de datos MS SQL Server.

var context = new SchoolContext();
var students = context.Students
                  .FromSql("Select * from Students where Name = 'Bill'")
                  .ToList();

En el ejemplo anterior, el método FromSql () se usa después del conjunto de entidades Student (DbSet <Student>), por lo que la consulta SQL especificada debe devolver un registro de la tabla Student, que se convertirá en la entidad Student. Entity Framework Core ejecutará la consulta especificada en la base de datos, es decir, en el ejemplo anterior, seleccione * de Estudiante con * Nombre = 'Bill'.

Consulta parametrizada

El método FromSql permite consultas parametrizadas utilizando la sintaxis de interpolación de cadenas en C #, como se muestra a continuación.

string name = "Bill";
var context = new SchoolContext();
var students = context.Students
                    .FromSql($"Select * from Students where Name = '{name}'")
                    .ToList();

The following is also valid.
string name = "Bill";
var context = new SchoolContext();
var students = context.Students
                    .FromSql("Select * from Students where Name = '{0}'", name)
                    .ToList();

El ejemplo anterior ejecutará la siguiente consulta SQL en la base de datos de SQL Server:

exec sp_executesql N'Select * from Students where Name = ''@p0''
',N'@p0 nvarchar(4000)',@p0=N'Bill'
go

Operador LINQ

También puede usar el operador LINQ después de la consulta original usando el método FromSql.

string name = "Bill";
var context = new SchoolContext();
var students = context.Students
                    .FromSql("Select * from Students where Name = '{0}'", name)
                    .OrderBy(s => s.StudentId)
                    .ToList();

En el ejemplo anterior, EF Core realiza la siguiente consulta combinando el método FromSql y el operador OrderBy.

exec sp_executesql N'SELECT [s].[StudentId], [s].[Name]
FROM (
    Select * from Students where Name = ''@p0''
) AS [s]
ORDER BY [s].[StudentId]',N'@p0 nvarchar(4000)',@p0=N'Bill'
go

Limitaciones de FromSql

La consulta SQL debe devolver entidades del mismo tipo que DbSet <T>. Por ejemplo, si usa FromSql después de un alumno, la consulta especificada no puede devolver la entidad del curso. El tipo temporal devuelto por el método FromSql () está en la lista de tareas.
La consulta SQL debe devolver todas las columnas de la tabla. Por ejemplo, context.Students.FromSql ("Seleccione StudentId, LastName de los estudiantes). ToList () arrojará una excepción. La
consulta SQL no puede incluir la consulta JOIN para obtener datos relacionados. Después del método FromSql (), use el método Incluir para cargar entidades relacionadas.

177 artículos originales publicados · 61 alabanzas · 170,000 vistas

Supongo que te gusta

Origin blog.csdn.net/xingkongtianyuzhao/article/details/104227957
Recomendado
Clasificación