2016-03-28 2 views
0
var results = ObjectContext.ExecuteStoreQuery<T>("exec MyStoredProc"); 

Der MyStoreProc gibt 1 Zeile immer mit 9 Spalten zurück, die alle int sind.So geben Sie den anonymen Typ aus der EF-SQL-Abfrage zurück

Ich möchte keine Klasse oder Struktur für diese Daten für die einmalige Verwendung erstellen.

Was wäre der sauberste Weg, dies OHNE eine Klasse zu erstellen?

+3

"* Ich möchte nicht eine Klasse oder Struktur für diese einmalige Verwendung Daten erstellen. Was wäre der sauberste Weg, dies zu tun?" * Nun, erstellen Sie Ihre eigene Klasse/Struktur :) –

+1

warum don willst du keinen Typ erstellen? Es dauert nicht lange. Wenn es temporär oder für eine Demo ist, erstellen Sie einfach einen Typ schnell. Wenn es sich um eine Langzeitlösung handelt, sollten Sie in Zukunft einen Typ für Wartbarkeit und Lesbarkeit erstellen. – kai

+0

@kai Das Hinzufügen eines weiteren DTO-Modellobjekts verschleiert die Gesamtlösung, verlangsamt Intellisense, mehr Dateien zum Download/Build usw. Unsere Lösung ist momentan sehr groß und wird immer nur innerhalb dieser Methode verwendet und nicht wiederverwendet Ich versuche alles in dieser Methode zu halten. – user3953989

Antwort

0

Scheint, dass EF nicht unterstützt, alle Typen anders als denen zurückgeben, die EF-Zuordnungen haben, wenn die ObjectContext.ExecuteStoreQuery() Methode verwendet.

Ich endete mit einem SqlCommand-Objekt und Datenreader mit einem anonymen Typ.

4

Theoretisch könnten Sie eine generische Wrapper-Methode erstellen, die den Typ <T> basierend auf einem von Ihnen übergebenen Beispielwert implizit erkennt und dann ein Beispiel für die anonyme Struktur übergibt, die Sie erwarten. Man könnte es so nennen:

var results = AnonymousQueryWrapper("exec MyStoredProc", new {id = 0, name = "", ...}); 

Aber ich würde sagen, dass eine private Klasse zu schaffen nicht viel belastender ist, und ist viel klarer. Also wenn du fragst "Was wäre der sauberste Weg das zu tun?" Ich muss antworten: "Erstelle einen benannten Typ".

Verwandte Themen