我正在为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
以获得更好的表现?
答案 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();
}
}