0

そのため、トランザクションスコープをにプルしましたaspect/policypipeline1つまたは複数のCRUD関連のメソッドやネストされたメソッドを呼び出すメソッド(データアクセスメソッド)を呼び出す前に、データベース接続を1つだけこのトランザクションスコープに関連付けたいと思います。

これを行うには、呼び出しハンドラーの入力引数の1つとして、使用するデータベース接続を挿入します。ただし、これにより、属性とそのターゲットメソッドの間に緊密な結合が追加されます。これは明らかにいたずらです。

データレイヤーをリファクタリングして、(同じ接続への)ネストされた呼び出しがネストされておらず、シーケンシャルであることを確認できます(SQL Server 2008トランザクションスコープを使用する場合、これが分散トランザクションにエスカレートしないようにします)。

もう1つの方法は、接続を提供するが、ビジネスレイヤーを基盤となる接続タイプに依存しない接続ファクトリである可能性があります。IDBConnectionこれを行うことができます。他のいくつかの考えは、TransactionScopeをサブクラス化することです(「re」の隣にある特定の1つの接続機能を追加することによって-役に立たない他の場所)、グローバル/静的データ接続オブジェクト。トランザクション内で使用しているメソッド間で共有したいオブジェクト。

このすべての背後にある理論的根拠は、単一のデータベース接続に依存するメソッドまたはメソッドのセットをMSDTC、可能であれば、静的接続オブジェクトの怒りを招くことなく、使用しないようにするクリーンな方法が必要なことです。

4

0 に答える 0