2009-06-05 7 views
6

On m'a confié la tâche de créer un site qui permettra à nos différents clients importants de se connecter à notre site Web et de cliquer sur nos diverses pages pour afficher les données d'analyse en fonction de leurs ventes.Gestion de différentes bases de données avec LINQ en fonction de l'utilisateur actuellement connecté?

Quelqu'un at-il une idée de la meilleure façon de gérer plusieurs bases de données en fonction de l'utilisateur? Disons que nous avons 3 grands clients, la décision de conception a été prise chaque grand client a sa propre base de données.

Si un utilisateur du clientA se connecte à notre système, il doit voir les analyses pour son entreprise et le modèle doit être extrait du contexte de données du client. De même, si quelqu'un se connecte et est associé au client B dans la base de données, il doit alors extraire ses données de ce contexte de données. Si je le peux, j'aimerais disposer d'une classe Data Access Layer écrite en LINQ et avoir un moyen de transmettre le DataContext associé à cet utilisateur lors de sa connexion. Quelqu'un peut-il penser à une façon appropriée ou propre de le faire?

+0

Le schéma sera-t-il le même pour toutes les bases de données? – BFree

+0

@BFree, dans la mesure où les requêtes que je vais faire, ils seront les mêmes. Ils peuvent éventuellement différer par une colonne de deux, mais pas en ce qui concerne les requêtes LINQ que je vais exécuter. –

+0

@TankMan, ce que vous faites est appelé sharding de base de données. – tuinstoel

Répondre

9

Si les schémas sont les mêmes pour toutes les bases de données, alors c'est très simple. Le datacontext a une surcharge qui prend une chaîne de connexion. Il suffit de stocker les différentes chaînes de connexion dans un emplacement centralisé (base de données, XML, ressource, etc.), puis de créer un seul datacontext avec cette chaîne de connexion que vous pouvez ensuite utiliser, quel que soit l'utilisateur connecté.

+0

La question que j'ai est de savoir comment gérer le changement de datacontext ou en utiliser un différent basé sur cet utilisateur particulier. –

+0

Je suis d'accord avec BFree. Votre point de pivot va être la chaîne de connexion. –

+0

@TankMan: Tout est dans la chaîne de connexion. Si vous détectez qu'un autre utilisateur s'est connecté, procurez-vous la chaîne de connexion correspondant et créez simplement un DataContext avec cette chaîne de connexion. – BFree

Questions connexes