Ich brauche eine Anleitung mit einem Problem, ich benutze Entity Framework 4.0, ich habe eine DAL und BLL und binden an ObjectDataSource auf der Seite.
Ich musste eine gespeicherte Prozedur mit PIVOT
und dynamischem SQL schreiben, um die Daten von mehreren Entitäten so zurückzugeben, wie ich es möchte. Jetzt versuche ich herauszufinden, wie Entity Framework ein benutzerdefiniertes Objekt zurückgeben kann, das ich an mein ObjectDataSource
auf der Seite binden kann. Ich BENÖTIGE ein benutzerdefiniertes Objekt oder ein dynamisches Objekt, da die gespeicherte Prozedur eine beliebige Zahl zurückgeben kann von Spalten, so dass ich eine stark typisierte Klasse oder Entität nicht verwenden kann und ich muss auch in der Lage sein, dies mit einem ObjectDataSource
zu verbinden.
Kann jemand darauf hinweisen, wie man das macht und wie man meine Funktion definiert? Mit einigen Codebeispielen bitte.
Ich habe gelesen, dass ich versuchen sollte, List<T>
für die Rückgabe eines Objekts zu verwenden, da EF die Rückgabe von Databases / Datasets nicht unterstützt. Bisher habe ich Folgendes, aber ich weiß, dass dies nicht korrekt ist.
Ich habe nicht viel mit Generika gearbeitet, wenn Sie darauf hinweisen könnten, wie das geht. Ich bin sicher, dass dies für viele Menschen hilfreich wäre. Bitte geben Sie Codebeispiele für die Funktion an und wie Sie ObjectDataSource
an das Rückgabeobjekt binden.
Ihre Hilfe wird sehr geschätzt!
Vielen Dank für Ihre Hilfe Richard, so sieht meine Funktion jetzt aus, basierend auf Ihrem Vorschlag, DbDataRecord zu verwenden
C # -Funktion für ObjectDataSource
in DAL
ObjectDataSource
in der ASPX-Seite
Im Moment bekomme ich diesen Fehler, wenn ich auf die Seite zugreife:
Der Ergebnistyp 'System.Data.Common.DbDataRecord' darf nicht abstrakt sein und muss einen Standardkonstruktor enthalten
Liegt das daran, dass die ExecuteStoreQuery
eine definierte Klasse oder Entität erwartet? Wie kann ich einfach ein Objekt basierend auf den Ergebnissen der gespeicherten Prozedur erstellen und diesem zuweisen?
Wenn Sie bereits einen Entitätstyp haben, der mit dem Rückgabetyp proc übereinstimmt, verwenden Sie ihn als Typparameter.
%Vor%Andernfalls können Sie einen ADO.NET DataReader verwenden um die Liste manuell zu erstellen.
%Vor%Wenn Sie die Ergebnisse in einem GridView darstellen möchten, dann sind Sie fast da - mit den Binding- und AutoGenerate-Spalten, weil ObjectQuery ein IEnumerable ist. Ich verwende ObjectQuery, aber Sie können dies mit ExecuteStoreQuery austauschen, da beide ein IEnumerable
zurückgeben %Vor%im XAML
%Vor%und Sie sehen die Spalten, die direkt in der Benutzeroberfläche zurückgegeben werden.
Wenn Sie WPF nicht verwenden und eine Liste Ihrer Elemente benötigen, müssen Sie nur Folgendes tun:
%Vor%oder um Ihre ursprüngliche Methode zu übernehmen, wäre es:
%Vor%Wenn Sie über die Felder iterieren müssen; dann wird das folgende tun:
%Vor%Eine der vielen Schönheiten von LINQ und Generics ist, dass Sie sich die meiste Zeit über die eigentlichen Datentypen nicht zu viele Gedanken machen müssen, bis Sie schließlich zu dem Punkt kommen, an dem Sie sie verarbeiten müssen.
Tags und Links c# entity-framework entity-framework-4 stored-procedures objectdatasource