Как реализовать UnitOfwwork Pattern при использовании дозвуковой 2.1 (шаблон репозитория)?
-
04-10-2019 - |
Вопрос
Я использую Disconus Repository Pattern (2.1) для ASP.NET MVC Application. В моем заявлении есть множество репозиториев, таких как ChateRepository, Blogrepository и т. Д., Каждый из этого хранилища, которого я звоню дозвуковым DB.Select().From()...ExecuteReader()
а затем загружать доменные объекты из тех читателей.
В действии контроллера я делаю несколько звонков из этих репозиториев, например,
List<IBlog> blogs=_blogRepository.GetHottestBlogs();
List<ICategory> categories=_categoryRepository.GetAll();
Должен ли я реализовать любую узор UnitOfwork для этого? .my сомнений в том, что насколько подгруппированы каждая операция db.update / insert / select .is a TransactionScope
достаточно для обновления партии или я должен использовать SharedDbConnectionScope
Чтобы получить лучшую производительность?
Решение
С дозвуковой вы должны объединить Skrescone и SharedDBConnectionsCope. В противном случае каждая команда будет использовать собственную выделенное соединение, которое расположено после выполнения, что приведет к неявному фирму (по крайней мере для MySQL и SQL Server, я думаю).
Каждый дозвуковой запрос в рамках SharedDBConnnectionsCope будет поделиться тем же соединением, поэтому вы можете использовать транзактиоскоп.
И вы должны использовать SharedDBConnnectionscope перед транзарами, в противном случае некоторые провайдеры не обнаружит, что вы выполняете транзакцию.
using (new SharedDbConnectionScope())
{
using (TransactionScope ts = new TransactionScope()
{
// Do some sh*i ;)
ts.Complete();
}
}