2016-03-30 19 views
1

Ich mache eine Webanwendung, die von mehr als einer Firma verwendet wird und ich möchte, dass jede von ihnen eine separate Datenbank hat.ASP.Net Entity Framework eine Datenbank pro Benutzer

Auf dem Anmeldebildschirm würde der Benutzer das Unternehmen auswählen, und es wird zu einer separaten Datenbank gehen, um die Verbindungszeichenfolgedaten abzurufen. Die Anwendung verwendet zuerst Code, sodass die Datenbank mit dieser neuen Verbindungszeichenfolge erstellt wird, falls sie nicht bereits vorhanden ist.

Mein Ansatz war es, die Verbindungszeichenfolge in der Benutzersitzung zu speichern.

public MyContext() : base(MySession.Current.ConnectionString) 
{ 
    Database.SetInitializer(new MyDevDbInitializer());  
} 

Ich habe eine Standardverbindungszeichenfolge erstellt, die zurückgegeben werden soll, wenn die Session nicht abgerufen werden kann. Dies scheint zu funktionieren, aber ich kann sehen, es geht für die Standardeinstellung einige Male bei jeder Anfrage vor dem Abrufen der gespeicherten. Aber die Datenbankerstellung und CRUD-Operationen funktionieren gut.

Ich weiß nicht, ob ich das richtig mache und wenn die andere Anfrage wichtig ist (ich nehme an, sie sind), diese Anfragen werden intern erledigt, ich kann sie nicht verfolgen.

Sorry für den langen Text. :)

+2

Ich würde Sie warnen, die Datenbank nicht automatisch zu erstellen. Ich würde einen Kontext für die Anwendung haben, verantwortliche Migration gegen eine master-Datenbank, und dann einen anderen für den Benutzerzugriff, der lediglich eine Verbindung mit einer vorhandenen Datenbank herstellt. Anschließend sollten Sie oder Ihr Infrastrukturteam eine Datenbank manuell für einen Benutzer erstellen, wenn sie ein Konto erstellen. Ehrlich gesagt ist es beängstigend, eine Web-App zu haben, die Datenbanken im laufenden Betrieb erstellt, aber Sie müssten dem SQL-Benutzer auch die Web-App mit den vollständigen Instanzberechtigungen verbinden, was ein großes Sicherheitsrisiko darstellt. –

+0

Zusätzlich zu dem, was @Chris Pratt geschrieben hat, denken Sie darüber nach, die Datenzugriffsebene mit ASP Calling Base (MySession.Current.ConnectionString) so eng zu machen. Sie haben keine Kontrolle über das Erstellen oder nicht einen Kontext mit einer falschen Verbindungszeichenfolge. Außerdem können Sie keine Komponententests schreiben. – bubi

+1

* Eine Datenbank pro Benutzer * klingt wie Sie müssen Ihre gesamte Architektur ernsthaft überdenken. Das hört sich nach einem furchtbar schlechten Design an ... –

Antwort

0

Meiner Meinung nach ist es gut, 1 Datenbank für jede Firma zu verwenden. Und für den Benutzer müssen Sie eine Tabelle erstellen, die alle Informationen für alle Benutzer speichert, es kann groß genug sein, spielt keine Rolle. Ich schlage vor, 1 Einheit für mehrere Datenbanken zu verwenden: http://olivierhelin.com/blog/entity-framework/entity-framework-6-one-entity-data-model-multiple-databases-2

Hope this help.

+0

Danke für die Hilfe :) Das heißt, ich hätte dann die Benutzer in separaten Datenbanken. Ich möchte alles modular zusammen haben. In jedem Fall, wenn das funktioniert, wäre es möglich, diesen Code zuerst zu verwenden? – Dothos

Verwandte Themen