Вопрос

Быстрый вопрос для вас, экспертов по шаблонам.

Мне нужен шаблон репозитория, который не связан с реальной технологией доступа к данным, поскольку я еще не определился с этим, и я хочу, чтобы он был гибким.Итак, это может быть L2S, L2E, NHibernate, Lightspeed или что угодно.

Но я начинаю путаться в этой штуке с UnitOfWork.

В мире L2S это, похоже, ваш DataContext.

Но как насчет мира, отличного от L2S, представьте, что я использовал рукописный SQL, например.

Мой вопрос в том, кто что делает?В моем методе Repo.Save() должно ли это вызывать UnitOfWork.Commit, который затем генерирует требуемый SQL INSERT / UPDATE ?

Не ожидаю определенного ответа, но немного обсуждения было бы неплохо, просто чтобы убедиться, что я на правильном пути!

Спасибо

Это было полезно?

Решение

Репозитории, безусловно, могут вызывать commit / save / submit для объекта unit of work, или они могли бы оставить это на усмотрение потребителя.Я предпочитаю последний сценарий, потому что он позволяет потребителю контролировать время жизни экземпляра unit of work, что позволяет потребителю использовать несколько репозиториев:

// 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