wie unitofwork Muster zu implementieren, wenn Unterschall 2.1 (Repository-Muster) mit?
-
04-10-2019 - |
Frage
Ich bin mit Subsonic-Repository-Muster (2.1) für asp.net Mvc application.In meine Anwendung, gibt es viele Repositories wie categoryRepository, Blogrepository etc.Inside jedes dieser Repository i Unterschall Aufruf bin DB.Select().From()...ExecuteReader()
der und dann laden Domain-Objekte von den Leser.
In der Controller-Aktion i machen mehrere Anrufe aus diesen Repositories für z.
List<IBlog> blogs=_blogRepository.GetHottestBlogs();
List<ICategory> categories=_categoryRepository.GetAll();
muss ich dafür jedes unitofwork Muster implementieren? .My Zweifel, dass, wie Unterschall führt jede Operation DB.Update / Insert / Select .ist ein TransactionScope
genug ist für Batch-Update oder muss ich zu verwenden SharedDbConnectionScope
haben, besser werden Leistung?
Lösung
Mit SubSonic müssen Sie Transaction und SharedDbConnectionScope kombinieren. Andernfalls wird jeder Befehl eine eigene dedizierte Verbindung ist, die nach der Ausführung angeordnet ist, die ein implizites Commit führen wird (zumindest für MySQL und SQL Server glaube ich).
Jede SubSonic Abfrage innerhalb eines SharedDbConnectionScope die gleiche Verbindung teilen, so dass Sie die TransactioScope verwenden können.
Und Sie haben die SharedDbConnectionScope vor der Transaction zu verwenden, da sonst einige Anbieter nicht erkennen, dass Sie eine Transaktion ausgeführt werden.
using (new SharedDbConnectionScope())
{
using (TransactionScope ts = new TransactionScope()
{
// Do some sh*i ;)
ts.Complete();
}
}