Entity Framework Core Series Tutorial-23-Native SQL-Abfrage

Führen Sie eine native SQL-Abfrage in Entity Framework Core aus

Entity Framework Core bietet die Methode DbSet.FromSql (), mit der SQL-Rohabfragen für die zugrunde liegende Datenbank ausgeführt und die Ergebnisse als Entitätsobjekte abgerufen werden können.
Das folgende Beispiel zeigt, wie eine SQL-Rohabfrage für die MS SQL Server-Datenbank ausgeführt wird.

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

Im obigen Beispiel wird die FromSql () -Methode nach dem Student-Entitätssatz (DbSet <Student>) verwendet, sodass die angegebene SQL-Abfrage einen Datensatz aus der Student-Tabelle zurückgeben muss, der in die Student-Entität konvertiert wird. Entity Framework Core führt die angegebene Abfrage in der Datenbank aus, dh wählen Sie im obigen Beispiel * von Student mit * Name = 'Bill' aus.

Parametrisierte Abfrage

Die FromSql-Methode ermöglicht parametrisierte Abfragen mithilfe der String-Interpolationssyntax in C # (siehe unten).

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();

Im obigen Beispiel wird die folgende SQL-Abfrage in der SQL Server-Datenbank ausgeführt:

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

LINQ-Operator

Sie können den LINQ-Operator auch nach der ursprünglichen Abfrage mit der FromSql-Methode verwenden.

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

Im obigen Beispiel führt EF Core die folgende Abfrage durch, indem die FromSql-Methode und der OrderBy-Operator kombiniert werden.

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

Einschränkungen von FromSql

Die SQL-Abfrage muss Entitäten des gleichen Typs wie DbSet <T> zurückgeben. Wenn Sie beispielsweise FromSql nach einem Schüler verwenden, kann die angegebene Abfrage die Kursentität nicht zurückgeben. Der von der FromSql () -Methode zurückgegebene temporäre Typ befindet sich in der Aufgabenliste.
Die SQL-Abfrage muss alle Spalten der Tabelle zurückgeben. Beispiel: context.Students.FromSql ("StudentId, Nachname von Schülern auswählen). ToList () löst eine Ausnahme aus. Die
SQL-Abfrage kann keine JOIN-Abfrage enthalten, um verwandte Daten abzurufen. Verwenden Sie nach der FromSql () -Methode die Include-Methode, um verwandte Entitäten zu laden.

Veröffentlichte 177 Originalartikel · 61 Lobpreisungen · 170.000 Aufrufe

Ich denke du magst

Origin blog.csdn.net/xingkongtianyuzhao/article/details/104227957
Empfohlen
Rangfolge