Entity Framework 5.0 と MVC4 を使用しています。私はいくつかのドメインを持っています。それぞれに独自の DbContext (適切なテーブルを使用)、リポジトリ、およびサービスがあります。UnitOfWork も実装しました。
特定のドメインの 1 つのサービス内のトランザクションで特定のフローを処理するのは簡単です。テーブルに対していくつかの操作を行っており、最後に、Transaction.Commit として動作する UnitOfWork.Save を呼び出しています。
しかし、2 つの異なるドメインに対して操作を呼び出す必要があり、この 2 つの操作を 1 つのトランザクション内に配置する必要があるとします。コントローラーからドメインのサービスにアクセスできるので、このアクションはそこから呼び出されます。現時点では、次の 3 つの解決策が考えられます。
- コントローラーに UnitOfWork を配置し、最後に Save メソッドを呼び出す必要があります (この考えは好きではありません)。
- UnitOfWork を持ち、両方のサービスにアクセスできるサービスを作成します (実際には上記と同じソリューションですが、ロジックを別のクラスに移動しています)
- コントローラー内に追加の TransactionScope を作成し、最後にコミットする必要があります
最適だと思うオプションを教えてください。上記の3つ以外のものがあれば教えてください。それとも、私のコンセプトに何か問題がありますか?ドメインとそのデータベースコンテキストを意味しますか?