0

我正在为 asp.net mvc 应用程序使用 subsonic 存储库模式(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以获得更好的性能?

4

1 回答 1

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();
    }
}
于 2010-05-26T08:28:26.030 回答