Verknüpfen von Tabellen aus zwei Datenbanken mit Entity-Framework

9

Ich arbeite an einer ASP.NET MVC 4-Webanwendung. Ich benutze Entity Framework als Datenzugriffsschicht, wobei ich den ersten Ansatz der Datenbank verwende ( .edmx file ).

Zur Zeit habe ich ein Problem mit Join-Tabellen, die in zwei verschiedenen Datenbanken definiert sind (d. h. ich habe zwei .edmx -Dateien).

Wenn ich beispielsweise Tabellen beitreten möchte, führe ich die folgende Abfrage aus: -

%Vor%

Ich werde zwei separate Aufrufe an die Datenbank und eine Verknüpfung innerhalb des Anwendungsservers haben, was nicht die beste leistungsorientierte Lösung ist. Im Idealfall werden die Joins vollständig innerhalb der Datenbank-Engine passieren.

Ich weiß, dass eine gespeicherte Prozedur mir erlaubt, Tabellen aus verschiedenen Datenbanken rein auf dem Server zu verbinden, aber ich möchte SP nicht benutzen, weil es meinen Code weniger wartbar und weniger testbar macht.

Also suche ich nach einer Lösung, wo ich den Join mit Entity-Framework machen kann und zu einem einzigen Datenbank-Join führen kann?

    
john G 19.10.2014, 00:53
quelle

3 Antworten

3

Wenn Sie mit einem einzigen Datenbankaufruf arbeiten möchten, müssen Sie in der Datenbank eine Ansicht erstellen, die die zwei Tabellen aus separaten Datenbanken zusammenführt. Sobald die Ansicht erstellt wurde, können Sie sie EF als einzelnes Objekt hinzufügen, das Sie weiter bearbeiten und abfragen können. Die Ansicht wird im Grunde eine Tabelle sein, und es wird leicht maintable und leicht an ein stark typisiertes Modell zu binden

Auf eine andere Art, ähnlich wie Sie gepostet haben, können Sie separate .edmx -Dateien abfragen und sie dann verbinden. Ja, es gibt zwei Aufrufe an die Datenbank, aber es sollte nicht so teuer sein und wird wahrscheinlich keinen Unterschied bemerken.

%Vor%     
CSharper 28.10.2014 14:23
quelle
1

@ CSharper's Antwort ist knapp. Wie @Oliver in den Kommentaren erwähnt, lädt IEnumerable die Tabelle in den Anwendungsspeicher, was zu Abstürzen führt, wenn Sie eine große Datenbank haben.

Die Lösung besteht darin, IQueryable zu verwenden, was mit LINQ aufgerufen werden kann - dies erzeugt SQL, das viel schneller ist.

%Vor%     
chakeda 29.06.2017 16:48
quelle
0

Könnte ich vorschlagen, dass Sie in Ihrer Datenbank nach einem Synonym suchen? Sie können beispielsweise ein Synonym für die Ressourcentabelle in der Datenbank erstellen, in der sich Ihre Tech-Tabelle befindet. Dies stellt sicher, dass Sie 2 EDMX-Dateien nicht pflegen müssen. Stattdessen können Sie eine einzige EDMX-Datei haben und Sie können einfach Ihre Tech-Tabelle mit dem Synonym der Ressourcentabelle verbinden und voila - Sie sind auf dem Weg.

UPDATE: Bitte beachten Sie, dass bei Verwendung von Synonymen zusätzliche Arbeit an der EDMX-Datei erforderlich ist, damit sie in Entity Framework funktioniert. Hier ist ein Blogpost , der von einem Programmierer, der es zur Arbeit gebracht hat. Hier ist die ursprüngliche stackoverflow Frage, die sie gestellt hat.

>

GLÜCKLICHE CODIERUNG !!! :)

    
Gjohn 19.10.2014 01:27
quelle