2010-12-31 12 views
4

Ich schreibe eine neue Multi-Tenant WCF RIA-Anwendung. Ich plane eine gemeinsame Datenbank mit separatem SQL Server-Schema für jeden Mandanten. Ich möchte NHibernate für Object-Relational Mapping verwenden.Multitenant NHibernate-Anwendung mit separaten SQL Server-Schema für jeden Mandanten

Die Konfiguration des SQL Server-Schemas in Mapping-Klassen hilft nicht, da es statisch ist und für jeden Tenant einen Satz Mapping-Klassen benötigt.

Ist es möglich, ISession dynamisch zu konfigurieren, welches SQL Server-Schema für die Zuordnung von Objekten zu Tabellen verwendet werden soll?

+0

Gibt es irgendeine Verbindung zwischen jedem Schema/Client? – gbn

+0

Ja, jeder Client (Mandant) würde ein separates Schema haben. – Branko

Antwort

3

Sie müssen für jeden Client eine separate SessionFactory erstellen und die default_schema-Eigenschaft in der Konfiguration entsprechend ändern.

+0

Ich mag die Idee mit einer separaten SessionFactory für jeden Client sehr. Auf diese Weise kann ich auch einen separaten Benutzernamen für jeden Client verwenden und ihm nur Berechtigungen für Objekte aus einem Schema erteilen. – Branko

1

Wenn zwischen den Clients keine Verbindung besteht, kann es sinnvoll sein, separate Datenbanken zu verwenden.

Nicht zuletzt, wenn Client A "Bitte wiederherstellen" sagt, werden Sie nicht die Daten anderer Clients zerstören.

+0

Ich stimme Ihnen vollkommen zu. Das Problem ist, dass es viele kleine Kunden geben wird. Das lässt mich mit vielen kleinen Datenbanken verwalten und bezahlen (ich plane, SQL Azure zu verwenden). – Branko

+0

Ah, OK. Nicht meine beste Idee, dann – gbn

+0

Ich werde mit einer Datenbank beginnen, aber wird die Verbreitung der Clients über weitere Datenbanken bei Bedarf unterstützen. Jede Datenbank würde Daten für eine Anzahl von Clients enthalten, abhängig von ihrer Verwendung. Mit dieser Konfiguration ist es möglich, dass eine Datenbank Daten nur für einen Client enthält, wenn sie diese benötigen und extra bezahlen möchten. – Branko