2009-08-03 3 views
1

리포지토리 및 UnitOfWork 패턴을 올바르게 구현했는지 확신 할 수 없지만이 방법이 어떻게 다른지 알 수는 없습니다.UnitOfWork 패턴 및 원자 단위 작업

예를 들어 Apple과 Orange의 두 개체가 있습니다. 애플이 지금과 같은 OrangeID를 통해 오렌지에 가입되어

는 :

public class Apple 
{ 
    public int OrangeID { get; set; } 
} 

나는 새로운 애플과 새로운 오렌지를 만들려면, 나는 적절 ID 링크를 설정하려는. 그러나 나는 문제가있다. Orange를 데이터베이스에 저장할 때까지 OrangeID를 알지 못합니다.

그래서 이것은 내가 다음이 의미 : 나는 위의 외부 앉아 거래를하지 않는 한

var unitOfWork = new UnitOfWork(); 
Orange newOrange = new Orange(); 
OrangeRepository.Insert(newOrange); 
unitOfWork.Commit(); 

//newOrange will have been updated with the actual ID 
Apple newApple = new Apple(newOrange.ID); 
etc... 

이, 원자 작동하지 않습니다. 하지만 UnitOfWork가 처리해야 할 것이라고 생각했습니다. 또는 내 UnitOfWork.Commit()가 데이터베이스에 쓸 때 적절한 값을 할당해야합니까?

어떤 도움/조언을 주시면 감사하겠습니다, 감사 던컨

답변

1

첫째, 애플과 오렌지 엔티티 사이의 관계로 이것을 볼 수 없습니다. Apple에 OrangeID라는 숫자 속성이 있습니다. 귀하의 코드는 다음과 같아야합니다 :

Apple apple = new Apple(newOrange); 
AppleRepository.Insert(apple); 
unitOfWork.Commit(); 

그런 다음 db 관계가 올바르게 설정되었는지 확인할 수 있습니다. 이제 작업 단위 구현이 작동하는지 여부에 대한 증거가 없습니다.

또한 시간 절약을 위해 많은 구현이 가능합니다. ws-helpers 프로젝트 : 이미 바퀴를 다시 발명하고 그것은 구글 코드를 호스팅 엿봄을 가지고 싶다면 난 내 :

의 구현을 사용하지만

. 실제로 이전 프로젝트의 일부 였기 때문에 이것을 독립형 프로젝트로 만들 시간이 필요합니다.

물론 가장 유명한 구현은 Rhino-Tools/UnitOfWork입니다. 그러나 필요한 도구를 여러 개 만들 수 있기 때문에 각각 별도의 트랜잭션이 필요하므로 Rhino-Tools에는 항상 단 하나의 현재 단위 만 생성되므로 좋아합니다. 하지만 현재 구현의 스레드 안전성에 대해서는 아직 확실하지 않습니다.

관련 문제