0

Quick 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 回答