문제

빠른 Q 당신을위한 패턴 전문가.

아직 결정하지 않았으며 유연하기를 원하기 때문에 실제 데이터 액세스 기술에서 연결된 저장소 패턴을 원합니다. 따라서 이것은 L2S, L2E, Nhibernate, Lightspeed 또는 무엇이든 일 수 있습니다.

그러나 나는이 단위에 대해 혼란스러워합니다.

L2S 세계에서 이것은 귀하의 데이터 컨텍스트 인 것 같습니다.

그러나 L2가 아닌 세계는 어떻습니까? 예를 들어 손으로 쓴 SQL을 사용하고 있다고 상상해보십시오.

내 질문은 누가 무엇을합니까? 내 repo.save () 메소드에서 필요한 삽입/업데이트 SQL을 생성하는 initofwork.commit을 호출해야합니까?

확실한 답을 기대하지는 않지만, 내가 올바른 길을 가고 있는지 확인하기 위해 약간의 토론이 좋을 것입니다!

감사

도움이 되었습니까?

해결책

리포지토리는 확실히 작업 단위에서 커밋/저장/제출을 호출하거나 소비자에게 맡길 수 있습니다. 소비자가 작업 인스턴스의 수명을 제어 할 수 있으므로 소비자가 여러 리포지토리를 참여시킬 수 있기 때문에 후자의 시나리오를 선호합니다.

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