2014-01-06 7 views
5

Ich verschiebe meine aktuelle Anwendung in eine Architektur mit mehreren Mandanten. Mit einer einzigen Codebasis muss ich mehrere Mandanten ansprechen. Ich benutze Single-Datenbank, Multiple-Schema-Ansatz. Jedem Mandanten wird ein eigenes Schema mit den Metadaten zugewiesen, die im Standardschema gespeichert sind.Verwenden mehrerer Datenbankschemas in einer Anwendung mit mehreren Mandanten

Anwendung wird mit ASP.NET MVC erstellt. Ich verwende Dapper, um eine Verbindung zu meinem SQL Server herzustellen. Ich habe 50+ Funktionen, die die Datenbank mit direkter Abfrage sowie gespeicherten Prozeduren aufruft. Gibt es eine Methode, mit der ich das Schema festlegen kann, wenn der Dapper für jeden Tenant initialisiert wird, ohne die Funktionen zu ändern.

Antwort

4

In SQL Server sind die Schemas Benutzern zugeordnet. Jeder Benutzer hat mindestens ein Standardschema. Sie können die Mieter mit Schema zuzuordnen, das heißt, Sie Mapping für

Mieter haben -> Schema -> Benutzer

dynamisch SQL-Verbindungszeichenfolge erstellen und die SQL-Benutzer übergeben zu diesem Mieter entsprechen. Auf diese Weise wird das Standardschema automatisch hervorgehoben und Sie müssen Ihre Dapper-Abfragen nicht ändern und müssen auch keine dynamischen Abfragen schreiben.

Hinweis: Vergessen Sie nicht, die Connection-Pooling-Implikation zu überprüfen.

1

Ich würde versuchen, einen einfachen Ansatz.

Mit Dapper, für einfache Wartung, speichere ich die Querys in einer externen XML-Datei. Sie könnten also eine externe XML-Datei für jeden Ihrer Kunden haben. Eine andere Lösung, aber ich habe es vorher nicht versucht, ich denke, dass Sie Ihrer Abfrage einen Parameter hinzufügen könnten, der der Schemaname wäre. In jeder Abfrage müssten Sie also immer das Schema angeben.

+0

Ich kann den Schemanamen dynamisch in meine Abfragen für jede Funktion hinzufügen. Dazu muss ich die vorhandenen Funktionen bearbeiten und Prozeduren speichern. Ich suche nach einer Alternative. Jeder Mieter trägt einen Schemanamen, daher kann ich auch kein XML verwenden. – Rifaj

+1

Wenn Sie über Funktionen und gespeicherte Prozeduren verfügen, können Sie das Schema nicht von außen einfügen, es sei denn, Sie verwenden die dynamische Abfrage (EXEC) in der Funktion oder in der Stored Procedure. Dies kann jedoch zu Sicherheitsproblemen führen. –

Verwandte Themen