質問

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

まだ決めていないので、実際のデータアクセステクノロジーから切り離されたリポジトリパターンが必要であり、柔軟性が必要です。そのため、これにはL2S、L2E、NHibernate、Lightspeedなどを使用できます。

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

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

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

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

明確な答えを期待していませんが、いくつかの議論は、ちょうど私が正しい軌道に乗っていることを確認するために良いでしょう!

ありがとう

役に立ちましたか?

解決

リポジトリは確かに作業単位オブジェクトでcommit / save / submitを呼び出すことができますが、これをコンシューマに任せることもできます。私は後者のシナリオを好みます。消費者が作業単位インスタンスの有効期間を制御できるため、消費者が複数のリポジトリを使用できるようになるためです。

// 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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top