0

あなたのためのクイックQはそこに専門家をパターン化します。

まだ決定していないので、実際のデータアクセス技術から切り離されたリポジトリパターンが必要であり、柔軟性が必要です。つまり、これはL2S、L2E、NHibernate、Lightspeedなどです。

しかし、私はこのUnitOfWorkのことについて混乱しています。

L2Sの世界では、これがDataContextのようです。

しかし、L2S以外の世界についてはどうでしょうか。たとえば、手書きのSQLを使用していたと想像してください。

私の質問は、誰が何をするのかということです。私のRepo.Save()メソッドでは、これでUnitOfWork.Commitを呼び出す必要があります。これにより、必要なINSERT / UPDATE SQLが生成されますか?

明確な答えを期待していませんが、私が正しい方向に進んでいることを確認するために、いくつかの議論が良いでしょう!

ありがとう

4

1 に答える 1

1

リポジトリは確かに、作業単位オブジェクトに対してコミット/保存/送信を呼び出すことができます。または、これをコンシューマーに任せることもできます。後者のシナリオを好むのは、コンシューマーが作業単位インスタンスの存続期間を制御できるようにするためです。これにより、コンシューマーは複数のリポジトリーを使用できるようになります。

// outside the repository layer
// int productId defined elsewhere
// int quantity defined elsewhere

IUnitOfWork unitOfWork = ... instantiate/get a new instance of your DataContext ...

ProductRepository productRepository = new ProductRepository(unitOfWork);
Product product = productRepository.GetById(productId);

Order order = new Order();
order.AddOrderLine(product, quantity);

OrderRepository orderRepository = new OrderRepository(unitOfWork);
orderRepository.Add(order);

unitOfWork.Save(); // This calls SubmitChanges() on the DataContext
于 2009-06-22T09:47:45.293 に答える