0

Entity Framework 5.0 と MVC4 を使用しています。私はいくつかのドメインを持っています。それぞれに独自の DbContext (適切なテーブルを使用)、リポジトリ、およびサービスがあります。UnitOfWork も実装しました。

特定のドメインの 1 つのサービス内のトランザクションで特定のフローを処理するのは簡単です。テーブルに対していくつかの操作を行っており、最後に、Transaction.Commit として動作する UnitOfWork.Save を呼び出しています。

しかし、2 つの異なるドメインに対して操作を呼び出す必要があり、この 2 つの操作を 1 つのトランザクション内に配置する必要があるとします。コントローラーからドメインのサービスにアクセスできるので、このアクションはそこから呼び出されます。現時点では、次の 3 つの解決策が考えられます。

  1. コントローラーに UnitOfWork を配置し、最後に Save メソッドを呼び出す必要があります (この考えは好きではありません)。
  2. UnitOfWork を持ち、両方のサービスにアクセスできるサービスを作成します (実際には上記と同じソリューションですが、ロジックを別のクラスに移動しています)
  3. コントローラー内に追加の TransactionScope を作成し、最後にコミットする必要があります

最適だと思うオプションを教えてください。上記の3つ以外のものがあれば教えてください。それとも、私のコンセプトに何か問題がありますか?ドメインとそのデータベースコンテキストを意味しますか?

4

1 に答える 1

0

UnitOfWork 実装が .NET で通常のトランザクションをサポートしていると仮定すると、次のことができ、現在実行中のトランザクションに登録する必要があります。

protected TransactionScope CreateTransactionScope()
{
    var options = new TransactionOptions();
    options.IsolationLevel = IsolationLevel.ReadCommitted;
    options.Timeout = TransactionManager.MaximumTimeout;
    return new TransactionScope(TransactionScopeOption.Required, options);
}

using (var scope = this.CreateTransactionScope())
{
    // do operations with context 1
    // do operations with context 2

    scope.Complete();
}
于 2013-07-19T21:14:37.927 に答える