내 현재 응용 프로그램 구조 작업 패턴의 디커플링 단위는 다음과 같습니다닷넷 - 여러 ORM의
- 모델 조립
- 데이터 어셈블리
- 는 ORM에 의해 구현 될 수있는 저장소 인터페이스를 정의
- ORM 어셈블리
- 리포지토리 인터페이스를에서 구현합니다. 데이터 어셈블리
- 는
- 이의 종류를 해결하기 위해 단결을 사용
Data.IRepository<>
- 비즈니스 어셈블리
ORM.GenericRepository<>
에 대한 참조 데이터 및 모델 어셈블리를 regsister하는 연합 (IoC 컨테이너)를 사용IRepository<>
- UI 어셈블리
- Refe 비즈니스 조립체
을 rences이 구조는 본질적 IRepository<T>
를 구현 ORM에서 비즈니스 계층을 분리 하였다.
이 분리 된 구조의 장점 중 하나는 ORM을 비교적 쉽게 대체 할 수 있어야한다는 것입니다. 예를 들어 Entity Framework에서 NHibernate로 이동하거나 기존 ORM을 업그레이드하는 것과 같이 비교적 쉽게 ORM을 대체 할 수 있어야합니다. 저는 현재 EF 4.1 코드를 먼저 사용하고 있고 NHibernate를위한 다른 어셈블리를 만들고 있습니다.
작업 단위 패턴을 구현하는 것이 좋습니다.
이 패턴은 비즈니스 계층 (내 데이터 어셈블리에 정의 된 인터페이스 포함)에서 사용해야하며 저장소 패턴을 사용한 것처럼 ORM 어셈블리에서 구현해야합니다. 현재 모든 인스턴스화 된 리포지토리는 자체 DbContext/세션을 가지며 수명이 리포지토리의 수명으로 설정됩니다. 문제가 될 수 있습니다. 문제가되는 것은 작업 단위 패턴을 구현할 수 있는지 확실하지 않습니다. 다른 ORM (어, 오히려 그것은 아마 내가 속도를 내고있는 것이 아닙니다)입니다.
이 마음에 오는 유일한 방법입니다 :
함수가 내 데이터 어셈블리에 IUnitOfWork 만들기 : object GetCurrentSession();
을 다음 ORM 어셈블리의 repositorys의 생성자의 인자를 가지고 있고 그것을 캐스팅 적절한 세션/DbContext (NHibernate가 Entity Framework에서 DbContext 인 경우 Hibernate가 다음 Session 인 경우)
이 상황에 대한 통찰력이 있다면 고맙겠습니다.
I 해결책을 발견 할 수있다
아이디어를 보려면 여기를 클릭하십시오 : http://bit.ly/gHLubu. – Steven