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. :)
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. –
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
* Eine Datenbank pro Benutzer * klingt wie Sie müssen Ihre gesamte Architektur ernsthaft überdenken. Das hört sich nach einem furchtbar schlechten Design an ... –