LINQ w wielu bazach danych

głosy
35

Mam dwie tabele, które muszą być połączone poprzez LINQ, ale żyją w różnych bazach danych. Teraz wracam wyniki jednej tabeli, a następnie poprzez zapętlenie i pobierania wyników innych, które jak można się domyślać, nie jest strasznie wydajny. Czy istnieje jakiś sposób, aby dostać je w jednej instrukcji LINQ? Czy jest jakiś inny sposób na budowę tego uniknąć zapętlenie? Po prostu szukam pomysłów, w przypadku jestem widokiem coś.

Zauważ, że nie można zmieniać baz danych, czyli nie mogę utworzyć widok w jednym, który odwołuje się do drugiej. Coś jeszcze nie próbowałem jest tworzenie widoków w trzeciej bazy danych, która odwołuje się zarówno tabele. Wszelkie pomysły mile widziane.

Utwórz 09/12/2008 o 15:43
źródło użytkownik
W innych językach...                            


3 odpowiedzi

głosy
39

Państwo może to zrobić, nawet na serwerach, tak długo, jak można uzyskać dostęp do bazy danych jednego z drugim. Oznacza to, że jeśli jest to możliwe, aby napisać SQL przeciwko ServerA . DatabaseA że dostęp ServerB . DatabaseB . schematu . TableWhatever , można zrobić to samo w LINQ.

Aby to zrobić, trzeba edytować plik .dbml ręcznie. Można to zrobić w VS 2008 łatwo tak: Kliknij prawym przyciskiem myszy, wybierz polecenie Otwórz za pomocą ... i wybierz edytor XML .

Spójrz na połączenia elementu, który powinien być w górnej części pliku. Co trzeba zrobić, to zapewnić jednoznaczną nazwę bazy danych (i nazwę serwera, jeśli są różne) dla tabel w bazie danych nie wskazywanego przez ten ciąg połączenia.

Otwarciu tag na tablicy elementu w swoim .dbml wygląda następująco:

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

Co trzeba zrobić, to dla dowolnej tabeli nie w bazie danych ciąg połączenia, należy zmienić tę Nazwa atrybutu coś jak jedna z nich:

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

Jeśli napotkasz problemy, upewnij się, że inne bazy danych (lub serwer) jest naprawdę dostępne z oryginalnej bazy danych (lub serwera). W SQL Server Management Studio, spróbować napisać mały SQL działa przeciwko oryginalnej bazy danych, który robi coś takiego:

SELECT SomeColumn
FROM OtherServer.OtherDatabase.dbo.SomeTable

Jeśli to nie działa, upewnij się, że masz użytkownika lub logowanie z dostępem do obu baz danych z tego samego hasła. Należy, oczywiście, jest taka sama jak ta stosowana w ciągu połączenia Twojego .dbml użytkownika.

Odpowiedział 09/12/2008 o 16:24
źródło użytkownik

głosy
6

Tworzenie proc / widok w bazie danych.

Odpowiedział 09/12/2008 o 16:04
źródło użytkownik

głosy
0

Biorąc pod uwagę twoje warunki, nie sądzę, można to zrobić w jednej instrukcji Linq. Ale można dołączyć wyniki swoich L2S zapytań do LINQ to Objects zapytania.

Odpowiedział 09/12/2008 o 16:11
źródło użytkownik

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