Utilisation de plusieurs schémas de base de données dans une application multi-locataire

architecture asp.net-mvc dapper multi-tenant

Question

Je déplace mon application actuelle vers une architecture multi-locataires. Avec une base de code unique, je dois m'adresser à plusieurs locataires. J'utilise une base de données unique, approche à schémas multiples. Chaque client hébergé se verra attribuer un schéma distinct avec les métadonnées enregistrées dans le schéma par défaut.

L'application est construite avec ASP.NET MVC. J'utilise Dapper pour me connecter à mon serveur SQL. J'ai plus de 50 fonctions qui appelle la base de données en utilisant la requête directe ainsi que les procédures stockées. Existe-t-il une méthode par laquelle je peux définir le schéma lorsque le dapper est initialisé pour chaque client sans modifier les fonctions.

Réponse acceptée

Dans SQL Server, les schémas sont associés aux utilisateurs. Chaque utilisateur a au moins un schéma par défaut. Vous pouvez associer le locataire au schéma, ce qui signifie que vous aurez un mappage pour

Locataire -> Schéma -> Utilisateur

Construisez dynamiquement votre chaîne de connexion SQL et transmettez l'utilisateur SQL correspondant à ce client. De cette façon, le schéma par défaut est automatiquement mis en évidence et vous n'avez pas à modifier vos requêtes Dapper et vous n'avez pas à écrire des requêtes dynamiques.

Remarque: N'oubliez pas de vérifier l'implication du pool de connexions.


Réponse populaire

Je voudrais essayer une approche simple.

Avec Dapper, pour faciliter la maintenance, je stocke les requêtes dans un fichier XML externe. Ainsi, vous pourriez avoir un fichier XML externe pour chacun de vos clients. Une autre solution, mais je ne l'ai pas encore essayé, je pense que vous pourriez ajouter à votre requête un paramètre qui serait le nom du schéma. Donc, dans chaque requête, vous devez toujours spécifier le schéma.



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi