0

TransactionScopeで他のこと(データベースに関連しない)を行うことはできますか?

それは悪い習慣ですか?

例えば

スコープ内でワークフローを開始します。

ワークフローの開始が失敗しない限り、DBに保存したくありません。

それが悪い習慣だとしたら、良い習慣は何でしょうか?

前もって感謝します。

using (TransactionScope scope = new TransactionScope())
{
    using (ComponentCM.Audit auditComponent = new ComponentCM.Audit())
    {
        using (AccessCM.Biz dataAccess = new AccessCM.Biz())
        {
            auditComponent.SaveInDB();
            dataAccess.SaveinDB()

            StartWorkflow();
        }
    }
    scope.Complete();
}
4

2 に答える 2

3

データベースでロックが発生する可能性があるため、トランザクションにかかる時間をできるだけ短くする必要があります。

この点に関しては、トランザクションの範囲外で他の作業を行う方がよいでしょう。

于 2012-09-25T10:28:39.563 に答える
1

私はオーデッドに同意します。

また、作業単位で定義されている状態の変更を定義する必要がscopeあることも付け加えておきます。TransactionScope言い換えれば、スコープ内の状態変更はすべて一緒に成功または失敗する必要があり、通常は同じ論理操作の一部です。

のスコープを可能な限り小さく保つために、一般的なパターンの 1 つに楽観的同時実行があります。オプティミスティック コンカレンシーを使用する場合、通常は、状態ストアで書き込み操作を実行するときにのみトランザクション スコープを開きます。この場合、通常、作業中のデータは、クエリとコミットの間で (別の操作によって) 変更されていないことを除いています。

于 2012-09-25T10:44:30.553 に答える