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
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."
Für Entity Framework 5 verwenden Sie
context.Database.SqlQuery
Und für Entity Framework 4 verwenden Sie den folgenden Code
%Vor%context.ExecuteStoreQuery
Verwenden Sie zum Zurückgeben einer Liste den folgenden Code
%Vor%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 .
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:
Und das funktioniert in jedem Fall: Für Tests, bei denen DbContext.Database.Connection
% SqlConnection
und% Glimpse.Ado.AlternateType.GlimpseDbConnection
Tags und Links c# entity-framework entity-framework-4 ado.net