작업 단위는 DbContext의 범위를가집니다. 이것은 저장소 클래스와 컨트롤러에 대한 주입 가능 종속성으로 설계되었습니다. 의존성 주입은 클래스가 생성자 또는 속성을 통해 의존하는 서비스에 대한 참조를 받아 들일 수 있도록하는 패턴입니다. Unit of Work는 Dependency Injection에 의해 보완되는 패턴입니다.
클래스에 사용되는 종속성을 관리하고 해당 종속성의 수명 범위를 관리하려면 Autofac 또는 Unity와 같은 Inversion of Control 컨테이너를 사용합니다. 예를 들어, MVC 및 웹 API의 경우, IoC 컨테이너는 요청 단위로 작업 단위 (Unit of Work)와 같은 종속성을 제공하도록 설정됩니다. (각 요청에 작업 단위 (UOW)의 별도 인스턴스가 발행됨을 의미)
작업 단위를 좀 더 제어하려는 경우, EF6에 대해 권장하는 구현은 Mehdi의 DbContextScope 패턴입니다. (http://mehdi.me/ambient-dbcontext-in-ef6/)이 패턴을 사용하여 ContextScopeFactory 및 ContextScopeLocator를 종속성에 주입 한 다음 팩토리를 사용하여 컨텍스트 범위 (작업 단위)를 작성하고 저장소는 로케이터를 사용하여 해당 작업 단위 (UOW)를 찾을 수 있습니다. 이렇게하면 using() 블록을 사용하여 작업 단위 (UOW)를보다 세부적으로 제어 할 수 있습니다.
그러나 Microsoft에서 EF6과 함께 사용할 작업 단위를 권장하지 않는다고 들었습니다. 사실입니까? EF6와 함께 우리는 UOW를 버려야합니까? – user9966
이 말을 들었지만, 작업 단위를 사용해야한다는 문서는 보지 못했습니다. DbContext는 트랜잭션을 관리하고 트랜잭션 범위 내에서 작업 할 수 있으므로 별도의 작업 단위 구현이 필요한지 여부를 질문 할 수 있습니다. 그러나 테스트 능력 측면에서 볼 때 작업 단위 패턴을 채택하면 DbContext 및 트랜잭션 범위보다 조롱하기가 더 쉽습니다. –