Zuerst muss ich sagen, ich weiß, dass sie eine sehr enge Frage ist, die ich auf stackoverflow fand, aber meine Frage ist ein wenig anders.Wie man einen DbCOntext im n-tier-Repository-Muster teilt. Asp .net mvc
Ich habe n-Tier-Anwendung in asp .net MVC, in denen ich habe:
A BOL Projekt (die EF-Klassen hat und DB-Objekt usw.),
BLL Projekt (die buiseness Logik),
als wir haben DAL Projekt (die Db Interaktion Logik hat, und es EF dbcontext von BOL verwendet).
Und ein Haupt mvc Projekt, die nun
usw. Controller und Ansichten ahs, wir verwenden Repository-Muster, haben wir viele Repositorys in BLL mit ihren Schnittstellen. Und auch wir haben viele Repositories in DAL, die ohne Schnittstellen sind, obwohl. Aber alle diese DAL-Repositories haben ein DbContext-Mitglied in ihnen, die in ihren Konstruktoren erstellt wird, so jedes DAL-Repository interagiert mit separaten Instanz von DbContext, die es erstellt hat.
Und in unserem mvc Projekt haben wir verwendete ninject BLL-Repositories in Controllern Konstrukteurs (scope in Anfrage) zu injizieren. Nun, das Problem wir konfrontiert ist, dass jedes BLL-Repository Referenzen auf eine oder mehrere DAL-Repositorys hat, und jedes dieser DAL-Repositorys verwenden ihre eigenen separaten DbCOntext. Das ist falsch und schlecht, deshalb suche ich nach der Möglichkeit, einen DbCOntext in allen DAL-Repositories pro Anfrage zu teilen (Egal wie viele BLL-Repositories Ninject in meinen Controller injiziert, stelle nur sicher, dass nur eine DbContext-Instanz erstellt und verwendet wird auf Anfrage). Und diesen Kontext nach jeder Anfrage entsorgen.
Eine Möglichkeit, die ich dachte war nicht DBcontext im Konstruktor von DAL-Repositories zu erstellen. Aber haben Sie einen Methodenaufruf (sagen Sie initiateDbContext), als auch fügen Sie diese Methode in BLL-Repositories hinzu, die nichts anderes tun, als die Smae-Methode ihrer Mitglieds-DAL-Repositories aufzurufen. Rufen Sie diese Methode für eine BLL-Repository im Controller-Konstruktor, und dann eine Methode zum Abrufen und Festlegen Db-Kontexte in allen anderen Repositorys aus dem ersten Repository. Aber ich weiß, das ist ein schlechter Ansatz, zuerst erstellen wir DbContext im Controller, der nur in DAL sein sollte, zweitens erstelle ich create, dbCOntext Methoden in DAL und in BLL Repositories, da ich DbCOntext übergeben muss BLL, die das an die DAL-Repositories weitergibt, mit denen es intern kommuniziert. Und das ist sehr schlecht.
Deshalb frage ich hier jedes gute Muster zu erreichen "EIN DBCONTEXT PRO ANFRAGE IN N-Tier mit Repositorie-Muster."
Die zufällige Fettschrift von Wörtern macht Ihre Frage nicht wirklich lesbarer. – CodeCaster
@CodeCaster Ich weiß, dass meine Frage nicht sehr sinnvoll ist, aber ich habe versucht, einige wichtige Punkte hervorzuheben, damit es leicht verständlich ist. Vielleicht kannst du etwas vorschlagen? –