Geben Sie die benutzerdefinierte Objektliste T aus dem Entitätsframework zurück und weisen Sie sie der Objektdatenquelle zu

8

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

%Vor%

ObjectDataSource in der ASPX-Seite

%Vor%

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?

    
Shokwave 27.10.2011, 15:11
quelle

3 Antworten

4

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%     
jrummell 27.10.2011 15:15
quelle
4

Was ist mit so etwas:

%Vor%     
nathan gonzalez 27.10.2011 15:57
quelle
0

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.

    
Richard Harrison 27.10.2011 16:50
quelle