LINQ über mehrere Datenbanken

stimmen
35

Ich habe zwei Tabellen bekam, die über LINQ verbunden werden müssen, aber sie leben in verschiedenen Datenbanken. Im Moment habe ich die Ergebnisse einer Tabelle bin zurückkehren, dann Schleife durch und die Ergebnisse der anderen abrufen, die, wie Sie sich vorstellen können ist nicht sehr effizient. Gibt es eine Möglichkeit, sie in eine einzige LINQ-Anweisung zu bekommen? Gibt es eine andere Möglichkeit, dies zu konstruieren, um das Looping zu vermeiden? Ich bin nur die Suche nach Ideen, falls ich etwas übersehen.

Beachten Sie, dass ich die Datenbanken nicht ändern kann, also kann ich nicht eine Ansicht in einer erstellen, die andere verweist. Etwas, das ich noch nicht versucht wird, Erstellen von Ansichten in einer dritten Datenbank, die beide Tabellen verweist. Irgendwelche Ideen willkommen.

Veröffentlicht am 09/12/2008 um 15:43
quelle vom benutzer
In anderen Sprachen...                            


3 antworten

stimmen
39

Sie können dies tun, auch über mehrere Server, so lange wie Sie eine Datenbank von dem anderen zugreifen können. Das heißt, wenn es möglich ist, eine SQL - Anweisung schreiben ServerA . DatabaseA , die greift auf ServerB . DatabaseB . Schema . TableWhatever , dann können Sie die gleiche Sache in LINQ tun.

Um es zu tun, müssen Sie die .dbml Datei von Hand bearbeiten. Sie können , wie dies in VS 2008 leicht tun: Mit Rechtsklick, wählen Sie Öffnen mit ... und wählen Sie XML - Editor .

Sehen Sie sich das Verbindungselement, das an der Spitze der Datei sein sollte. Was Sie tun müssen, ist einen expliziten Datenbanknamen angeben (und Servernamen, falls abweichend) für Tabellen nicht in der Datenbank von dieser Verbindungszeichenfolge hingewiesen.

Das Starttag für ein Table - Element in Ihrer .dbml sieht wie folgt aus :

<Table Name="dbo.Customers" Member="Customers">

Was Sie tun müssen , ist, für jede Tabelle nicht in der Datenbank der Verbindungszeichenfolge, das ändert Namensattribut etwas wie eine von ihnen:

<Table Name="SomeOtherDatabase.dbo.Customers" Member="Customers">
<Table Name="SomeOtherServer.SomeOtherDatabase.dbo.Customers" Member="Customers">

Wenn Sie Probleme, stellen Sie sicher, dass die andere Datenbank (oder Server) von Ihrer ursprünglichen Datenbank wirklich zugänglich ist (oder Server). Server Management Studio in SQL, versuchen, eine kleine SQL-Anweisung zu schreiben gegen Ihre ursprüngliche Datenbank ausgeführt wird, die so etwas wie dies tut:

SELECT SomeColumn
FROM OtherServer.OtherDatabase.dbo.SomeTable

Wenn das nicht funktioniert, stellen Sie sicher , Sie haben einen Benutzer oder Login mit Zugriff auf beiden Datenbanken mit dem gleichen Passwort. Es sollte selbstverständlich sein , die gleiche wie die in Ihrer .dbml der Verbindungszeichenfolge verwendet.

Beantwortet am 09/12/2008 um 16:24
quelle vom benutzer

stimmen
6

Erstellen Sie eine proc / Ansicht in Ihrer Datenbank.

Beantwortet am 09/12/2008 um 16:04
quelle vom benutzer

stimmen
0

Angesichts Ihren Bedingungen, ich glaube nicht, dass Sie dies in einer Linq-Anweisung tun können. Aber Sie können die Ergebnisse Ihrer L2S Abfragen in eine Linq to Objects-Abfrage beitreten.

Beantwortet am 09/12/2008 um 16:11
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more