Как реализовать шаблон unitofwork при использовании Subsonic 2.1 (Шаблон репозитория)? - PullRequest
0 голосов
/ 22 мая 2010

Я использую шаблон дозвукового хранилища (2.1) для приложения asp.net mvc. В моем приложении есть много хранилищ, таких как categoryRepository, Blogrepository и т. Д. Внутри каждого из этих хранилищ я вызываю DB.Select().From()...ExecuteReader() subsonic и затем загружаю объекты доменаот этих читателей.

В действии контроллера я делаю несколько вызовов из этих репозиториев, например,

List<IBlog> blogs=_blogRepository.GetHottestBlogs();

List<ICategory> categories=_categoryRepository.GetAll();

Должен ли я реализовать какой-либо шаблон unitofwork для этого?. Я сомневаюсь, что как дозвуковойвыполняет каждую операцию DB.Update / Insert / Select. Достаточно ли TransactionScope для пакетного обновления или мне нужно использовать SharedDbConnectionScope для повышения производительности?

1 Ответ

1 голос
/ 26 мая 2010

С 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();
    }
}
...