Datenbank-Kontext und Return Dynamic Result Set in ASP.NET MVC
In MVC 4 und EF-5 ich will laufen dynamische Abfrage.
var returndata = Context.Database.SqlQuery(Type, strsql, null);
ich weiß nicht, wie viele Felder zurück und Namen. Aus diesem Ergebnis möchte ich die Struktur einer Tabelle anzeigen auf anzeigen.
Frage : Was sollte ich an als Typ?
meine Abfrage zurückgeben unten Ergebnis:
Feld 1, Feld 2, Feld 3, Feld 4, Feld 5
Row1...
Row2..
Freuen uns über jede Anregung.
- In was für einer situation sind, die Sie ausführen einer Abfrage, ohne zu wissen, die erwarteten Ergebnisse? Es klingt wie eine Einladung für SQL-injection, und auf der Oberfläche scheint, wie dies vermieden werden sollte.
- Sie können prüfen, Pivot-Abfrage über hier.
- ein Beispiel wäre die Verwendung einer gespeicherten Prozedur, in dem die Ergebnismenge kann sich ändern. E. g. Reporting?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnte man eine raw-SQL-Abfrage, da EF nicht unterstützen, dass:
dann:
und schließlich in Ihre Ansicht:
Diese Methode lädt die Daten aus der SQL-select (mit Parametern), um die Liste von Zeilen, wo jede Zeile ist ein Wörterbuch der Spalten (der Schlüssel ist der name der Spalte).
Schließlich machte ich ist mit TypeBuilder-option vorgeschlagen, die von "Mortalus" und ExpandoObject-Objekt. Es hat wenig performance-overhead jetzt.
Nehmen Typebuilder-code von "Mortalus" beantworten, dann machte ich code nach meiner Anforderung wie folgt.
so, jetzt habe ich "Dictionary" - Objekt vom dynamischen Objekt. und mit der können Sie bequem arbeiten können zur design-Zeit dann lieber warten, bis die Laufzeit mit "dynamic" - Objekt.
Context.Database.SqlQuery(Type, sqlStatement, null);
- Typ == ? DankOhne zu wissen, etwas über die Art, die zurückgegeben wird, ich glaube, Sie könnten von Glück.
Wenn Sie wissen, welche Muster könnte es fallen unter, Sie könnte etwas
try { } catch () { }
's auf Schnittstellen, die diesen Parametern entsprechen, auf die sonst die dynamische Abfrage, aber das scheint, wie es könnte ein wenig schmerzhaft.Leider, EF wird nicht materialisieren Objekte, es sei denn, es kennt Ihre
Type
.Wenn dies wirklich notwendig für Sie, ich denke, Ihre beste Wette wäre, zu fallen, zurück zu
ADO.NET
undDataTable
.Ebenso post von Darin Dimitrov, aber es gibt DataTable
Verwenden
Beispiel für MS SQL Server
Habe ich vor kurzem stolperte über dieses Beispiel:
http://www.markzhou.com/blog/post/2011/06/02/Use-dynamic-type-in-Entity-Framework-41-SqlQuery()-method.aspx
Hatte ich noch nicht die Zeit es zu testen, aber es mir scheint, dass es möglich ist, mit einigen zusätzlichen arbeiten, die zur Konstruktion der dynamische Typ.
Kurz gesagt, Sie wollen würde, so etwas zu tun:
Wo
TypeBuilder
ist im einzelnen beschrieben in der post habe ich beigefügt.Hinzufügen Petr Voborník Antwort, dynamische Abfrage, füge ich dynamischen einfügen von ResultSet, mein Antrag nimmt die dynamische Abfrage aller Tabellen der gesamten Datenbank, ein Stück zu einer Zeit, und dann fügt die dynamischen Ergebnisse in eine remote-Datenbank, mit Immer Verschlüsselt (hier weggelassen). Die übergabe eines sb-Befehl-und parameter-Objekt.