2009-06-09 1 views
0

Ich habe eine App, die ich schreiben muss, die eine Datenbank für jede Firma verwenden wird, die wir als ein Kunde erhalten können.Wie behebe ich, mit welcher Datenbank ein Benutzer mit LINQ und ASP.NET MVC verbunden ist?

Leider sind die Schemas für alle Firmendatenbanken nicht identisch, obwohl sie für diese App alle die grundlegenden Informationen haben, die ich brauche (auch wenn ihre Spaltennamen anders sind/in einer anderen Tabelle).

Meine Lösung, die mehrere Datenbanken Handhabung ist eine IRepository Schnittstelle wie zu erstellen:

List<User> getUsers(); 
List<Account> getAccounts(); 
void UpdateAccount(Account account); 

usw.

ich für jede Datenbank eine DAL-Klasse schreiben würde, die diese Schnittstelle implementieren werden. Diese Klasse wird die entsprechende LINQ Datacontext für seine eigene Datenbank verwenden:

alt text

Hier können Sie die Ordner für Lowes, HOMEDEPOT und FrankLumber sehen. Jeder hat eine DAL-Klasse, die IRepository implementiert.

Meine Frage ist, wo sollte ich mit der Instanziierung der Factory-Methode umgehen, damit ich eine neue DAL-Klasseninstanz für jeden Benutzer, der sich anmeldet, basierend auf welcher "Firma" gehören.

Also, wenn ein lowes Kunde sich anmeldet, ruft er die RepositoryFactory auf, übergibt ihm den Benutzer und gibt die entsprechende DAL zurück, die ich Methoden dann polymorph aufrufen kann, da ich weiß, dass sie die oben genannten Methoden implementieren werden.

Ich bin neu in ASP.NET MVC und MembershipProviders und einige Tipps nutzen könnten, wie ich sollte für jeden Benutzer die Instanz der DAL bestehen bleiben, nachdem sie sich anmelden.

Antwort

1

Sie können die DAL Instanzen instanziiert in Ihrem Controller-Aktionen. Wenn Sie wirklich viele Aktionen ausgeführt haben, können Sie die DAL-Instanz an einem besseren Ort erstellen, der unter Aktionen (wie Attributen) geteilt wird.

Sie können im ASP.NET-Sitzungsstatus persistent bleiben oder erstellen der Datenbankkontext jedes Mal erneut, wenn Sie ihn benötigen (stellen Sie sicher, dass Sie den Datenkontext jedes Mal wieder schließen, am besten verwenden Sie das Schlüsselwort 'using' im Datenkontext)

Verwandte Themen