2010-12-30 4 views
1

프로덕션 데이터베이스가 Firebird이지만 SQLite를 사용하여 in-momory 통합 테스트를 수행하고자하는 상황이 있습니다. 지금까지 우리가 직면 한 유일한 문제는 두 데이터베이스에서 사용되는 데이터 유형의 차이입니다.FluentNHibernate 테이블 데이터 타입 (다른 데이터베이스 벤더)

예를 들어 FluentNHibernate를 사용하여 각 도메인 객체를 매핑 할 때 명시 적으로 지정해야 할 때마다 열 유형을 지정합니다. 다음 클래스의 속성을 사용하여 CustomSqlType을 지정합니다.

public static class DATATYPES 
{ 
    public const string SMALLINT = "SMALLINT"; 
    public const string BOOLEAN = "CHAR(5)"; 
    public const string INTEGER = "INTEGER"; 
    public const string DECIMAL_MONEY = "DECIMAL(18,4)"; 
    public const string DECIMAL_EXCHANGE_RATE = "DECIMAL(18,8)"; 
    public const string DECIMAL_QUOTE_PRECISION = "DECIMAL(7,6)"; 
    public const string DECIMAL_PERCENT = "DECIMAL(6,2)"; 
    public const string BLOB_NULLABLE = "BLOB SUB_TYPE 1 SEGMENT SIZE 1 CHARACTER SET UTF8 COLLATE UTF8"; 
    public const string BLOB_NOTNULL = "BLOB SUB_TYPE 1 SEGMENT SIZE 1 CHARACTER SET UTF8 NOT NULL COLLATE UTF8"; 
} 

위 클래스에서 볼 수있는 값을 Firebird 데이터베이스의 CHAR (5) 열에 매핑 할 수 있습니다. 이제 SQLite에 대해 동일한 매핑을 사용하려고하므로 BLOB 및 부울 필드에 문제가 발생합니다.

다른 데이터베이스의 매핑 코드를 복제하지 않고이 단점을 극복하기 위해 수행 할 수있는 것에 대한 조언이 필요합니다.

답변

0

내 머리 꼭대기에서 속성을 필드에 매핑하는 각 지점에서 명시 적으로 열 유형을 정의하는 대신 대신 이것을 가리키는 컨벤션 클래스로 통합 할 수 있습니까? 이것은 모든 부울이 CHAR (5)에 매핑되는 경우 관계없이 모든 부울 속성에 대해 무의식적으로 매핑하는 것보다 관습이 낫습니다. 그런 다음 사용중인 DB에 따라 규칙을 전환 할 수 있습니다.

+0

그래서 CustomSqlType에 대한 규칙을 적용해야합니다. 우리는 데이터베이스간에 쉽게 상호 교환 할 수 있기 때문에 아주 좋은 생각 인 것 같습니다. 예제를 제공해 줄 수 있습니까? 우리는 또한 조사 중이다. – Hugusta

+0

감사합니다. Rich 님, 우리는이 문제를 해결할 수있는 규칙을 구현했습니다. 좋은 대답! – Hugusta

관련 문제