2009-06-05 8 views
6

Ich wurde beauftragt, eine Website zu erstellen, die es unseren verschiedenen Großkunden ermöglicht, sich auf unserer Website anzumelden und auf unsere verschiedenen Seiten zu klicken, um die Analytics-Daten basierend auf ihren Verkäufen zu sehen.Umgang mit verschiedenen Datenbanken mit LINQ basierend auf dem aktuell angemeldeten Benutzer?

Hat jemand eine Idee über die beste Möglichkeit, mehrere Datenbanken basierend auf dem Benutzer zu behandeln? Sagen wir, wir haben 3 namhafte Kunden, die Designentscheidung wurde getroffen, jeder große Kunde hat seine eigene Datenbank.

Wenn sich ein Benutzer von clientA in unserem System anmeldet, sollte er die Analysen für sein Unternehmen sehen, und das Modell sollte den Datenkontext von clientA abbauen. Wenn sich jemand anmeldet und mit clientB in der Datenbank verbunden ist, müssen die Daten aus diesem Datenkontext abgerufen werden.

Wenn ich kann, möchte ich eine Data Access Layer-Klasse in LINQ geschrieben haben und eine Möglichkeit haben, den zugeordneten DataContext mit diesem Benutzer zu übergeben, wenn sie sich anmelden. Kann jemand an einen geeigneten oder sauberen Weg denken, dies zu tun?

+0

Wird das Schema für alle Datenbanken gleich sein? – BFree

+0

@BFree, soweit die Abfragen, die ich mache, werden sie gleich sein. Sie können sich schließlich um eine Spalte von zwei unterscheiden, aber nicht in Bezug auf die LINQ-Abfragen, die ich ausführen werde. –

+0

@TankMan, was Sie tun, heißt Datenbank Sharding. – tuinstoel

Antwort

9

Wenn die Schemas für alle Datenbanken gleich sind, dann ist es sehr einfach. Der Datenkontext hat eine Überladung, die eine Verbindungszeichenfolge annimmt. Speichern Sie einfach die verschiedenen Verbindungszeichenfolgen an einem zentralen Ort (Datenbank, XML, Ressource, was auch immer) und erstellen Sie dann nur einen Datenkontext mit dieser Verbindungszeichenfolge, die Sie dann unabhängig von der Verbindung verwenden können.

+0

Die Frage, die ich habe, ist, wie handle ich den Datenkontext oder die Verwendung eines anderen basierend auf diesem bestimmten Benutzer. –

+0

Ich stimme mit BFree überein. Ihr Drehpunkt wird die Verbindungszeichenfolge sein. –

+0

@TankMan: Es ist alles in der Verbindungszeichenfolge. Wenn Sie feststellen, dass ein anderer Benutzer eine Verbindung hergestellt hat, rufen Sie die Verbindungszeichenfolge ab und erstellen Sie einen DataContext mit dieser Verbindungszeichenfolge neu. – BFree

Verwandte Themen