如何在使用亚音速2.1(存储库模式)时实现单元模式?

时间:2010-05-22 05:31:57

标签: asp.net-mvc subsonic subsonic-simplerepository

我正在为asp.net mvc应用程序使用亚音速存储库模式(2.1)。在我的应用程序中,有许多存储库,如categoryRepository,Blogrepository等。在此存储库的每个存储区中,我调用subsonic的DB.Select().From()...ExecuteReader()然后加载这些读者的域对象。

在控制器操作中,我从这些存储库进行多次调用,例如

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

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

我是否必须为此实现任何单元模式?。我怀疑是亚音速如何执行每个操作DB.Update / Insert / Select。是TransactionScope是否足以批量更新或我必须使用SharedDbConnectionScope以获得更好的表现?

1 个答案:

答案 0 :(得分:1)

使用SubSonic,您必须将TransactionScope和SharedDbConnectionScope结合使用。 否则每个命令都会使用它自己的专用连接,这个连接在执行后被释放,这将导致隐式提交(至少对于我认为的MySQL和Sql Server)。

SharedDbConnectionScope中的每个SubSonic查询都将共享相同的连接,因此您可以使用TransactioScope。

您必须在TransactionScope之前使用SharedDbConnectionScope,否则某些提供商将不会检测到您正在执行事务。

using (new SharedDbConnectionScope())
{
    using (TransactionScope ts = new TransactionScope()
    {

        // Do some sh*i ;)
        ts.Complete();
    }
}