Benutzerdefiniertes Paging mit einer gespeicherten Prozedur mit OData-Feed C # ohne Entity Framework

8

Ich frage mich, ob mir jemand helfen kann. Seit einiger Zeit versuche ich herauszufinden, wie man benutzerdefiniertes Paging in einem OData Feed (v4) Web API 2 implementiert, um einen Power Bi Feed zu füttern und keinen Erfolg zu haben / p>

Die Daten stammen aus einer Datenbank, Datenbank und ist eine Kombination aus 5 Tabellen mit Joins, was es nicht geeignet macht mit Entity Framework zu arbeiten, abgesehen davon, dass es sehr langsam mit Entity Framework ist (45k Datensätze von einem Controller) .

Ich habe viele verschiedene Ansätze ausprobiert, indem ich die Gesamtmenge der Datensätze eingestellt habe, um das Framework auszutricksen und die seitenbezogenen Ergebnisse mit leeren Mitgliedern der Liste aufzufüllen, bis zum grundlegenderen Beispiel unten. Allerdings kann ich den get client (Power BI) immer noch nicht korrekt auslesen, ohne eine extrem große Anzahl von Datensätzen vom Controller zu senden. Bitte sehen Sie sich eine vereinfachte Abfrage und einen vereinfachten Code an. Jede Hilfe wäre sehr willkommen, da es anscheinend keine klaren Beispiele dafür gibt, wie dies ohne Entity Framework funktioniert.

Der unten stehende Code funktioniert, aber ich habe immer wieder Varianten des gleichen Problems, das Framework macht das Paging auf der Liste, nachdem es zurückkommt, trotz allem, was ich davor getan habe

Gespeicherte T-SQL-Prozedur:

%Vor%

Der Controller, der auf einen Repo zeigt, der die obige Abfrage aufruft

%Vor%

Das Paging durch das Framework erfolgt nach diesem Punkt return response; .

    
Jimbo Jones 02.02.2018, 20:03
quelle

2 Antworten

0

Die Lösung, die ich am Ende fand, bestand darin, das Framework durch die Erweiterung von EnableQueryAttribute zu unterbrechen (vorausgesetzt, Sie schalten die Filterung usw. aus und legen die maximale Seitengröße fest). In der Paging-Abfrage müssen Sie einen über Ihre Seite gehen, um einen internen Mechanismus auszulösen. Diese Lösung ist nur ein Workaround. Der Schlüssel besteht darin, Take auf 0 zu setzen, bevor Sie "ApplyTo" anwenden.

%Vor%

PagingAttribut

%Vor%

Ich setze das unten im Controller

%Vor%     
Jimbo Jones 14.02.2018, 10:16
quelle
0

Ohne die vollständigen Anforderungen zu kennen, gehe ich davon aus, dass das ultimative Ziel dieser Daten ein Power Bi-Bericht sein wird. Daher schlage ich vor, dass Sie den speziellen Paging-Code vollständig überspringen und Power Bi Desktop direkt mit dem SQL Server verbinden, um auf die Tabellen zuzugreifen.

Power Bi Desktop wird sein Bestes tun, um die Beziehungen für Sie neu zu erstellen. Wenn Ihre ursprünglichen Tabellen und IDs auf eine direkte Art und Weise benannt wurden, macht Power Bi Desktop eine ziemlich anständige Aufgabe, die Beziehungen für Sie neu zu erstellen. Probieren Sie es aus.

Sobald der Import abgeschlossen ist, können Sie die Beziehungen überprüfen, wenn Sie auf klicken Beziehungsansicht Wenn eine Beziehung falsch ist, doppelklicken Sie darauf, um sie zu entfernen oder zu bearbeiten.

Wenn Sie befürchten, dass bei jeder Ausführung des Berichts die Leistung der Datenbank beeinträchtigt wird, ist der Standardmodus für Power Bi darin, eine Kopie der Daten zu importieren. Dies wird empfohlen, wenn die Daten weniger als 1 GB betragen.

Für größere Datenmengen gibt es eine DirectQuery -Option, die dies sein kann versucht. DirectQuery wurde als Antwort auf die Notwendigkeit entwickelt, größere Datenmengen zu laden, und hat seine Grenzen (einzelne Quellendatenbank, kann zu komplexe Abfragen nicht verarbeiten, Datenbankleistung und einige visuelle Funktionen sind begrenzt).

    
Taterhead 07.02.2018 12:51
quelle