benutzerdefinierte sql mit Entity-Framework ausführen?

8

Ich muss eine benutzerdefinierte Abfrage ausführen, die irgendwo in der Datenbank gespeichert wird, und ich muss sie in einer Datentabelle oder einem Dataset zurückgeben und sie an eine Gridview binden, bei der die Spalten autogenerate auf true gesetzt sind.

All meine Datenzugriffsebene funktioniert perfekt mit dem Entitätsframework, aber für ein bestimmtes Szenario muss ich das tun und ich frage mich, ob ich ado.net mit dem Entityframework kombinieren soll oder ob EF es irgendwie tun kann

    
Luis Valencia 05.06.2012, 13:35
quelle

4 Antworten

8

Wenn Sie ADO.NET-Strukturen (DataTable oder DataSet) zurückgeben möchten, verwenden Sie einfach klassisches ADO.NET. Sie werden es einfacher finden, als wenn Sie versuchen, Daten an ein Entity-Set zu binden und dann ein DataTable oder DataSet selbst zu füllen.

Wenn Sie jedoch wirklich und wirklich daran interessiert sind, eine benutzerdefinierte Abfrage über EntityFramework auszuführen, sehen Sie sich an ExecuteQuery Sie können eine SQL-Abfrage ausführen und das Ergebnis den Entitäten in Ihrem Modell zuordnen. Es wäre dann eine Übung Ihrerseits, das IEnumerable-Ergebnis zu übernehmen und es einer DataTable oder DataSet zuzuordnen. Daher meine ursprüngliche Antwort "mach es einfach mit guten altmodischen ADO.NET-Methoden."

    
villecoder 05.06.2012, 13:39
quelle
16

Für Entity Framework 5 verwenden Sie

  

context.Database.SqlQuery

Und für Entity Framework 4 verwenden Sie den folgenden Code

  

context.ExecuteStoreQuery

%Vor%

Verwenden Sie zum Zurückgeben einer Liste den folgenden Code

%Vor%     
Md. Nazrul Islam 16.03.2013 16:42
quelle
9

Hier ist eine andere Dimension und leichtere Vorgehensweise. Rufen Sie SQL Connection mit Ihrem Entity Framework-Kontext ab:

%Vor%

Und wir können DataAdapter oder eine andere klassische Methode verwenden, um Abfragen über die EF-Verbindung auszuführen.

Das wird sehr nützlich sein, wenn wir etwas dynamisch machen und wenn wir keine Entity zuordnen können. Wir können Dinge zum Beispiel in einer DataTable bekommen.

Die obige Syntax ist für EF 5.0 .

    
Tharun 17.05.2013 09:56
quelle
2

Ich benutze EF6 und eines Tages benötigte ich Weg, um dynamische SQL-Zeichenfolge auszuführen und DataTable zu erhalten. Zuerst habe ich nur DbContext.Database.Connection auf SqlConnection gesetzt und den ganzen Job erledigt. Es funktionierte für Tests, aber die Anwendung war kaputt, weil Glimpse, das wir verwenden, Self-Implementierung von DbConnection mit dem Typ Glimpse.Ado.AlternateType.GlimpseDbConnection injiziert. Ich brauche einen Ansatz, der unabhängig von DbConnection funktioniert. Schließlich habe ich folgenden Code:

%Vor%

Und das funktioniert in jedem Fall: Für Tests, bei denen DbContext.Database.Connection % SqlConnection und% Glimpse.Ado.AlternateType.GlimpseDbConnection

ist     
Alezis 30.07.2015 09:17
quelle