Как реализовать шаблон 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();
    }
}
Другие вопросы по тегам