2

1 つのトランザクションで複数のテーブルに行を作成する複雑なワークフローがあります。操作の 1 つは、(ServiceStack 認証機能から) 新しい UserAuth を作成することです。

トランザクション内のすべてのデータベース操作は同じ接続で動作するはずだと思います。それが本当なら、トランザクション内で UserAuthRepository.CreateUserAuth を呼び出すと、独自の接続を使用しているように見えるため、問題になる可能性があると思います。

したがって、私の質問は、以下に示すようなコードがある場合、UserAuth の作成がトランザクションの一部になるかどうかです。そうでない場合、トランザクションの一部として新しいユーザーを作成するにはどうすればよいでしょうか?

  using (var db = Db.OpenDbConnection()) {
    using (var trans = db.OpenTransaction()) {

      ... do some databae operations via. db ...

      var userAuth = UserAuthRepository.CreateUserAuth(
        new UserAuth{UserName = "blabla"}, 
        "password"
      );

      ... do some more databae operations via. db ...

      trans.Commit(); 
    }
  }
4

1 に答える 1

3

内部的には、ServiceStackがデータベースへのアクセスを必要とするときはいつでも、たとえばOrmLiteUserAuthRepository.CreateUserAuthで、新しい接続を要求して使用し、完了したらすぐに破棄します。

現在、カスタムトランザクションから切り離す方法はありません。

于 2012-08-15T16:29:17.100 に答える