come implementare modello unitofwork quando si utilizza subsonico 2.1 (Pattern Repository)?
-
04-10-2019 - |
Domanda
Sto usando Pattern Repository subsonico (2.1) per asp.net mvc application.In mia domanda, ci sono molti repository come categoryRepository, Blogrepository etc.Inside ciascuno di questo repository io chiamo DB.Select().From()...ExecuteReader()
di subsonica e oggetti poi il caricamento del dominio da quelli lettore.
Nel azione di controllo faccio più chiamate da questi repository per es.
List<IBlog> blogs=_blogRepository.GetHottestBlogs();
List<ICategory> categories=_categoryRepository.GetAll();
Devo realizzare qualsiasi modello unitofwork per questo? .La mia dubbio è che come subsonico esegue ogni operazione DB.Update / Insert / Select .è un TransactionScope
è sufficiente per l'aggiornamento batch o fare devo usare SharedDbConnectionScope
per ottenere una migliore prestazioni?
Soluzione
Con SubSonic è necessario combinare TransactionScope e SharedDbConnectionScope. Altrimenti ogni comando utilizzerà il proprio collegamento dedicato che è disposto dopo l'esecuzione, che porterà ad un implicito commit (almeno per MySQL e SQL Server credo).
Ogni interrogazione SubSonic entro uno SharedDbConnectionScope condividerà la stessa connessione, in modo da poter utilizzare il TransactioScope.
E si deve utilizzare lo SharedDbConnectionScope prima della TransactionScope, altrimenti alcuni fornitori non in grado di rilevare che si sta eseguendo una transazione.
using (new SharedDbConnectionScope())
{
using (TransactionScope ts = new TransactionScope()
{
// Do some sh*i ;)
ts.Complete();
}
}