2011-10-28 2 views
0

나는 대부분의 데이터베이스가 독립적 인 Fluent NHibernate 규약을 가지고있다.유창한 NHibernate에서 DB 특정 관습

Public Sub Apply(ByVal instance As IPropertyInstance) Implements IConvention(Of IPropertyInspector, IPropertyInstance).Apply 
    instance.CustomSqlType("VARCHAR2(50 BYTE)") 
End Sub 

정말 난 그냥 (즉 처음 개발 객체) DB 생성을위한 이와 같은 컨벤션을 사용하지만, DBMS 문자열 속성에 대한 의존과 같은 하나 몇 가지가 있습니다. 이 모든 것이 잘 작동하고 오라클에 좋지만 SQLite DB에는 VARCHAR2 유형이 없기 때문에 인 메모리 SQLite DB를 사용하여 단위 테스팅을하고 분명히이 컨벤션은 작동하지 않을 것입니다.

누구나 이런 상황에서 Fluent NHibernate를 구성하는 방법에 대한 좋은 조언이나 참고 자료가 없습니까?

현재로서는 데이터베이스 독립적이며 하위 디렉토리/네임 스페이스에 종속적 인 규칙을 갖는 일반적인 규칙 집합이 있다고 생각합니다. 그런 다음 특정 일반 DBMS와 관련된 규칙뿐만 아니라 모든 일반 규칙을 선택하는 사용자 지정 ITypeSource 구성 요소를 지정할 수있는 일종의 구성을 갖게됩니다. SqlConventionTypeSource, OracleConventionTypeSource ...

친절하게는 Ryan.

답변

0

일반적으로 실행 파일에 컨벤션 (유창한 구성의 나머지 부분)을 설정합니다.

즉, GUI, 단위 테스트 및 ISession/ISessionFactory 기반 서비스를 사용하는 상황에서 다른 유창한 구성을 갖게됩니다.

구성에 하드 코드를 적용한 것처럼 들리지만 이제 환경에 대한 정보에 따라 "구성자"가 다르게 작동하는 방법을 알아 내려고합니다.

가장 간단한 방법은 최상위 레벨에서 구성을 작성하고 필요에 따라 종속성을 제공하는 것입니다. 그렇게하면 다른 환경에서 동일한 코드 경로로 묶이지 않게됩니다.

NHibernate에 의존하는 것은 무엇이든, 생성자 인수 또는 속성 설정자로 ISession 또는 ISessionFactory을 수락하도록 설정하십시오. 그렇다면이 문제는 발생하지 않습니다. 실제로 데이터 저장소를 쿼리 할 필요가없는 테스트를 위해 조롱 할 수도 있습니다.

물론 FNH 구성을 생성하는 모든 클래스가 자체적으로 구성 가능하도록 설정하고 구성 라인에서 조건문을 사용할 수 있습니다. 하지만 일반적으로 FNH 설정은 시작하는 코드가 너무 적어서 그만한 가치는없는 것 같습니다. 사소한 변경을 할 때마다 SQL Server, Oracle, SQLite 등의 구성을 완전히 분리하면됩니다.

+0

응답 해 주셔서 감사합니다. –

+0

참고; 나는 Windsor IoC로 NHibernate를 구성하기 위해 Castle.Facilities.NHibernateIntegration 라이브러리를 사용합니다. 이 방식으로 NHibernate를 사용하는 모든 서비스/발표자는 ISessionManager를 필수/선택적 클래스 종속으로 생성 할 수 있습니다. 서비스를 해결하면 Windsor는 ISessionManager의 구체적인 구현을 주입합니다. 기본적으로 세션 관리 (예 : 세션 당 요청 당 개방 세션)에 대해 너무 걱정할 필요가 없으며 ISessionManager를 조롱하는 좋은 단위 테스트를 수행 할 수 있습니다. –

+0

IConfigurationBuilder 인터페이스를 통해 세션 팩토리의 기본 구성을 수정할 수 있습니다.이 인터페이스에서는 규약과 자동 매핑을 사용하여 유창하게 NHibernate 세션 팩토리를 구성합니다.필자는 FNH AutoPersistenceModel에게 협약을 어디에서 찾을 것인지 알려줄 필요가 있습니다. 규칙은 재사용을위한 좋은 후보자이며 상당히 복잡하고 잘 정의되어 있으며 변경 될 가능성이 거의 없습니다. 이것은 내 원래의 문제로 돌아가며, 일부 관례는 DB 고유 (즉, 스키마를 생성하는 데 사용되는 규칙)입니다. –