2010-05-22 2 views
0

asp.net mvc 응용 프로그램에 subsonic 저장소 패턴 (2.1)을 사용하고 있습니다. 내 응용 프로그램에는 categoryRepository, Blogrepository 등 많은 저장소가 있습니다.이 저장소 각각에 대해 아음속 전화 인 DB.Select().From()...ExecuteReader()을 호출하고 해당 판독기에서 도메인 개체를로드하고 있습니다. .subsonic 2.1 (저장소 패턴)을 사용할 때 단위 작업 패턴을 구현하는 방법은 무엇입니까?

컨트롤러 작업에서 나는이 리포지토리로부터 여러 번 전화를 겁니다.

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

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

내가 이것에 대한 어떤 UnitOfWork에 패턴을 구현해야합니까? 누군 의심의 여지가 각 작업의 DB.Update이/삽입/선택 됐나 방법 아음속가 행하는 TransactionScope 일괄 업데이트에 대한 충분하다는 것이다 또는 내가 사용해야합니까 더 나은 성능을 얻으려면 SharedDbConnectionScope?

답변

1

SubSonic을 사용하면 TransactionScope와 SharedDbConnectionScope를 결합해야합니다. 그렇지 않으면 모든 명령이 실행 후 처리되는 자체 전용 연결을 사용하므로 암시 적 커밋이 발생합니다 (최소한 MySQL 및 SQL Server의 경우).

SharedDbConnectionScope 내의 모든 서브 소닉 쿼리는 동일한 연결을 공유하므로 TransactioScope를 사용할 수 있습니다.

그리고 TransactionScope보다 먼저 SharedDbConnectionScope를 사용해야합니다. 그렇지 않으면 일부 공급자가 트랜잭션을 실행하고 있음을 감지하지 못합니다.

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

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

Thanks for Many. TransactionDope를 SharedDbConnectionScope 전에 사용하려고했습니다. 서브 소닉 라이브러리와 함께 제공되는 단위 테스트에서 어떻게 수행되는지. –

+0

예, 얼마 전 문서에서 잘못되었습니다. 그러나 DB Lib이 TransactionScope를 구현하는 방법에 따라 다릅니다. AfiSql Sql Server는 SqlConnection을 생성 할 때 Transaction.Current를 찾고 MySql은 MySqlConnection을 생성 한 후에 TransactionScope를 지원합니다. 그러나 SubSonic은 여러 DBMS를 지원하기 때문에 먼저 SharedDBConnectionScope를 사용하는 것이 좋습니다. –

관련 문제