3

趣味/学習アプリケーションで asp.net SqlMembershipProvider と LinqToSql を使用しています。LinqtoSql に保持しているユーザー プロパティがいくつかあるので、フローは次のとおりです: Membership.CreateUser -> MyClass.AddUserDetails。すべてをトランザクションにラップしたいので、myclass ビットが失敗した場合は、メンバーシップ ビットをロールバックできます。その方法について何か提案はありますか?

4

3 に答える 3

4

私の実際の経験(複数回起こった):

  • ジュニアプログラマーはサイトを書きます。
  • コード レビュー中に、ユーザーの作成とプロファイルの作成 (通常はカスタム SqlProvider を使用) の間で欠落しているトランザクションを見つけます。
  • すべてを DTC トランザクションでラップします。
  • ジュニアプログラマーのコンピューターでは何も機能しません。
  • ジュニア プログラマーのコンピューターで DTC を修正します。
  • 共有ホスティング環境にデプロイします。
  • ホスティング環境では何も機能しません。
  • DTC を修正しようとしているホスティング会社と 4 時間議論します。
  • サイトをオンラインにする必要があるため、トランザクションを削除します。
  • 祈る。

メンバーシップはあまり好きではありません...

于 2008-10-03T17:42:02.083 に答える
3

プロバイダーは明示的にトランザクションをサポートしていません。私はこの機能を以前に求めました:

http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=102268

MSDTC で調整されたトランザクションのオーバーヘッドが発生しますが、TransactionScope クラスを使用すれば動作するはずです。

于 2008-10-03T17:35:14.297 に答える
0

DataContext の Transaction プロパティを設定して、既に持っているトランザクションに参加させることができます。

于 2008-10-03T17:25:57.547 に答える