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 に答える