Как реализовать шаблон unitofwork при использовании Subsonic 2.1(Шаблон репозитория)?
Я использую дозвуковой шаблон репозитория (2.1) для приложения asp.net mvc. В моем приложении есть много репозиториев, таких как categoryRepository,Blogrepository и т. Д. Внутри каждого из этих репозиториев я называю subsonic's DB.Select().From()...ExecuteReader()
а затем загрузка объектов домена из этих читателей.
В действии контроллера я делаю несколько вызовов из этих репозиториев, например, для
List<IBlog> blogs=_blogRepository.GetHottestBlogs();
List<ICategory> categories=_categoryRepository.GetAll();
Должен ли я реализовать какой-либо шаблон unitofwork для этого? Я сомневаюсь, что как subsonic выполняет каждую операцию DB.Update/Insert/Select .Is a TransactionScope
достаточно для пакетного обновления или мне нужно использовать SharedDbConnectionScope
чтобы получить лучшую производительность?
1 ответ
С SubSonic вы должны объединить TransactionScope и SharedDbConnectionScope. В противном случае каждая команда будет использовать свое собственное выделенное соединение, которое удаляется после выполнения, что приведет к неявной фиксации (по крайней мере, для MySQL и Sql Server, я думаю).
Каждый запрос SubSonic в SharedDbConnectionScope будет использовать одно и то же соединение, поэтому вы можете использовать TransactioScope.
И вы должны использовать SharedDbConnectionScope перед TransactionScope, иначе некоторые провайдеры не обнаружат, что вы выполняете транзакцию.
using (new SharedDbConnectionScope())
{
using (TransactionScope ts = new TransactionScope()
{
// Do some sh*i ;)
ts.Complete();
}
}