2009-08-27 4 views
0

DNN 4.9でユーザーをインポートするモジュールを開発しています。DNNクラスのトランザクションを使用してDotNetNukeユーザーをインポート

私はトランザクションのサポートが必要ですが、DNNクラスを使用してユーザーをインポート/作成する必要があります。ボックスの外では、クラスはトランザクションをサポートしていないようです。

私は、ユーザーを作成するには、次のオブジェクトを使用しています:

UserController.CreateUser(ref UserInfo) ... 

私は既存のモジュールおよびインポートする方法の方法を完全に書き直し/変更を改善していたようにはオプションではありません。

答えて

0

を(ユーザーを作成するには、直接SQL文を使用してのように)私はDNNユーザないんだけど、CLRのトランザクションのコンテキストwhithin任意のADO.Net操作が自動的にトランザクションに登録します:

using(TransactionScope scope = new TransactionScope(
    TransactionScopeOption.Required)) 
{ 
     UserController.CreateUser(ref UserInfo) 
     ... 
     scope.Complete(); 
} 

ない限り一部のDNNコードを明示的にに設定すると、新しいスコープをオプションSupressで作成すると、実際のデータベース作業が適切なトランザクションに登録されます(たとえば、SqlClient操作はSqlTransactionに登録されます)。

更新

トランザクションスコープは、現在のスレッドに関連付けられたコンテキストオブジェクトです。作成されると、その存在をチェックする.Netコンポーネントがそのコンポーネントを見つけ、トランザクションに参加しなければならないことを知ります。

ファイル操作はトランザクションスコープに登録できません。基本ファイルシステムはトランザクションをサポートしていないため(少なくともWin7まで)、トランザクションスコープに登録することはできません。 SQL Serverプロバイダ、Oracle Provider、MSMQアクセサ、およびトランザクションをサポートするその他の.Netコンポーネントのようなコンポーネントは、トランザクションを開始し、現在のスコープに追加します。スコープが 'complete'の場合、同等のSqlTransactionがコミットされます。スコープ「終了」(つまり、usingブロックの最後に到達したためDisposeメソッドが呼び出されますが)が完了しない場合、SqlTransactionはロールバックされます。

複数のコンポーネントが単一のトランザクションスコープに登録されている場合、それらは分散トランザクションの一部になります。これは、トランザクションスコープの下で2つの別々の接続を使用するなどの単純な処理で発生します。 ADO.Netは自動的にそれらを真のdistributed transactionに登録します。

+0

ありがとうございました!私は頭の後ろのどこかにこれが存在することを知っています。スコープの詳細を少し詳しく説明できますか?これにはファイル操作などの操作が含まれていますか? どうすれば賞品をプレゼントできますか? – Johannes

+0

最新情報を見る賞金はあなたが「受け入れられた」と答えたものに報酬を与えられます。 –

関連する問題