Wie implementiert man das Unit Of Work Muster mit Dapper?
Derzeit, ich bin versucht, Dapper ORM mit Unit Of Work + Repository-Pattern.
Will ich mit dieser Einheit Arbeiten im Gegensatz zu einer einfachen dapper Repository aufgrund der Tatsache, dass mein insert und updates erfordern einen Grad der Verarbeitung von Transaktionen. Ich war nicht in der Lage ist, um jede nützliche Beispiele, wie Sie die meisten scheinen zu verwenden, Entity Framework und Leckage-Problem innerhalb der Einheit Arbeiten.
Könnte jemand bitte zeigen Sie mich in die richtige Richtung?
InformationsquelleAutor der Frage Stig | 2015-07-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese Git Projekt ist sehr hilfreich. Ich ging von der gleichen und haben einige änderungen wie pro meine brauchen.
Nun, Ihre repositories sollten akzeptieren, das UnitOfWork in gewisser Weise. Ich wähle Dependency Injection mit Konstruktor.
Und dann rufen Sie es wie folgt:
Mit der Transaktion:
Ohne Transaktion:
Bitte beachten Sie, dass, UnitOfWork ist mehr als DBTransaction.
Mehr details über Repository im obigen code gefunden werden konnte hier.
InformationsquelleAutor der Antwort Amit Joshi
Stehen auf den Schultern der anderen hier.
In Anbetracht dieser Antwort ist oben in den meisten Google-Suchanfragen in Bezug auf "dapper" und "unit of work". Ich wollte meine Herangehensweise, die ich verwendet habe, zu große Wirkung, mehrere Male jetzt.
Mit einem ficitious (und sehr vereinfacht) Beispiel:
Ein paar Punkte vor der Freigabe Implementierungen.
IDbContext
ist das repository, das Rückgrat.IUnitOfWork
ist eine Kapselung vonIDbTransaction
und sorgt dafür, dass bei der Arbeit mit mehreren repositories, die Sie teilen sich eine einzige Datenbank-Kontext.Umsetzung von
IDbContext
Umsetzung von
IUnitOfWork
Umsetzung von
IProductRepository
Zugriff auf die Datenbank, einfach instanziieren
DbContext
oder Spritzen mit dem IoC-container Ihrer Wahl (ich persönlich benutze den IoC-container von .NET Core).Die explizite Notwendigkeit für
Commit()
für dieses einfache nur-lese-Betrieb scheint übertrieben, aber zahlt sich, wie das system wächst. Und anscheinend, bietet eine kleinere Leistung nach Sam Safran. Sie "können" auch weglassendb.Commit()
auf einfache lese-Operationen, dies zu tun, obwohl Sie verlassen die Verbindung offen und legen Sie die Verantwortung für die Reinigung die Dinge auf den garbage collector. So dass dies nicht empfohlen.Ich in der Regel bringen die
DbContext
in die Falte auf der service-Schicht, in der es arbeitet im Einklang mit anderen Diensten zu bilden, die "ServiceContext". Ich habe dann einen Verweis auf diese ServiceContext im eigentlichen MVC-Schicht. Als ein weiterer Punkt zu erwähnen, ist es empfehlenswert, verwendenasync
den ganzen Stapel, wenn Sie können. Es entfällt hier der Einfachheit halber.InformationsquelleAutor der Antwort pimbrouwers