LINQ σε πολλαπλές βάσεις δεδομένων

ψήφοι
35

Έχω δύο πίνακες που πρέπει να συνδεθούν με LINQ, αλλά ζουν σε διαφορετικές βάσεις δεδομένων. Αυτή τη στιγμή είμαι επιστρέφουν τα αποτελέσματα ενός πίνακα, τότε looping μέσα και την ανάκτηση των αποτελεσμάτων του άλλου, που όπως μπορείτε να μαντέψετε, δεν είναι τρομερά αποτελεσματική. Υπάρχει κάποιος τρόπος για να μπει σε μια ενιαία δήλωση LINQ εκεί; Υπάρχει κάποιος άλλος τρόπος για να κατασκευάσει αυτό για να αποφευχθεί η looping εκεί; Είμαι απλά ψάχνουν για ιδέες, σε περίπτωση που είμαι πάνω από κάτι.

Σημειώστε ότι δεν μπορώ να τροποποιήσει τις βάσεις δεδομένων, δηλαδή δεν μπορώ να δημιουργήσετε μια προβολή σε αυτό που παραπέμπει στο άλλο. Κάτι που δεν έχω δοκιμάσει ακόμα δημιουργεί θέα σε μια τρίτη βάση δεδομένων που αναφέρεται σε δύο πίνακες. Οποιεσδήποτε ιδέες ευπρόσδεκτες.

Δημοσιεύθηκε 09/12/2008 στις 15:43
πηγή χρήστη
Σε άλλες γλώσσες...                            


3 απαντήσεις

ψήφοι
39

Μπορείτε να το κάνετε αυτό, ακόμη και σε servers, εφ 'όσον μπορείτε να έχετε πρόσβαση μία βάση δεδομένων από την άλλη. Δηλαδή, αν είναι δυνατόν για να γράψει μια δήλωση SQL κατά ServerA . DatabaseA που έχει πρόσβαση ServerB . DatabaseB . σχήματος . TableWhatever , τότε μπορείτε να κάνετε το ίδιο πράγμα σε LINQ.

Για να το κάνετε, θα πρέπει να επεξεργαστείτε το αρχείο .dbml με το χέρι. Μπορείτε να το κάνετε αυτό στο VS 2008 εύκολα σαν αυτό: Κάντε δεξί κλικ, επιλέξτε Άνοιγμα με ... , και επιλέξτε XML συντάκτη .

Κοιτάξτε την σύνδεση στοιχείο, το οποίο θα πρέπει να είναι στην κορυφή του αρχείου. Τι πρέπει να κάνετε είναι να παράσχει μια σαφή όνομα της βάσης δεδομένων (και το όνομα του διακομιστή, εάν είναι διαφορετική) για πίνακες όχι στη βάση δεδομένων που υποδεικνύεται από αυτή την συμβολοσειρά σύνδεσης.

Το άνοιγμα ετικέτα για ένα πίνακα στοιχείου στην .dbml σας μοιάζει με αυτό:

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

Αυτό που πρέπει να κάνετε είναι, για οποιοδήποτε τραπέζι , δεν σε βάση δεδομένων της συμβολοσειράς σύνδεσης, το αλλάξει αυτό το όνομα χαρακτηριστικού σε κάτι σαν ένα από αυτά:

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

Αν αντιμετωπίσετε προβλήματα, βεβαιωθείτε ότι η άλλη βάση δεδομένων (ή server) είναι πραγματικά προσβάσιμο από την αρχική βάση δεδομένων (ή server). Στον SQL Server Management Studio για, δοκιμάστε γράφοντας μια μικρή δήλωση SQL εκτελείται κατά την αρχική βάση δεδομένων που κάνει κάτι σαν αυτό:

SELECT SomeColumn
FROM OtherServer.OtherDatabase.dbo.SomeTable

Εάν αυτό δεν λειτουργεί, βεβαιωθείτε ότι έχετε ένα χρήστη ή να συνδεθείτε με πρόσβαση σε δύο βάσεις δεδομένων με τον ίδιο κωδικό πρόσβασης. Θα πρέπει, βέβαια, να είναι η ίδια με εκείνη που χρησιμοποιείται σε συμβολοσειρά σύνδεσης .dbml σας.

Απαντήθηκε 09/12/2008 στις 16:24
πηγή χρήστη

ψήφοι
6

Δημιουργήστε ένα proc / προβολή στη βάση δεδομένων σας.

Απαντήθηκε 09/12/2008 στις 16:04
πηγή χρήστη

ψήφοι
0

Λαμβάνοντας υπόψη τις συνθήκες σας, δεν νομίζω ότι μπορείτε να το κάνετε αυτό με μία δήλωση Linq. Αλλά μπορείτε να συμμετάσχετε τα αποτελέσματα των L2S απορίες σας σε ένα Linq σε αντικείμενα ερώτημα.

Απαντήθηκε 09/12/2008 στις 16:11
πηγή χρήστη

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