2012-07-12 3 views
1

ODBC를 통해 Progress/OpenEdge 데이터베이스와 함께 NHibernate를 사용할 수 있도록 사용자 지정 dialect를 만들었습니다. 대부분의 경우 방언은 잘 작동하지만 SELECT TOP 문에 문제가 있습니다. 는 A 매개 변수로 반환하는 열의 양에 다음과 같은 문제는 문이 생성되는 것입니다 :OpenEdge 데이터베이스에 NHibernate 사용자 정의 언어를 사용하여 최상위를 선택하십시오.

SELECT TOP ? SomeColumn 
FROM SomeTable 
where SomeColumn = ?; p0 = 100, p1 = 'test' 

진행률/Openedge 데이터베이스가이 기능을 지원하지 않는, 그래서 방언을 일부 변경하고 싶습니다 SELECT TOP의 열 양에 대한 매개 변수를 사용하지 않도록 명령문을 강제 실행하십시오.

이것이 가능합니까? 자 NHibernate V를 사용하는 방법 임. 3.3.1

답변

1

NHibernate's source code보고함으로써

, 나는 당신이 false를 반환하는 SupportsVariableLimit 속성을 재정의 할 필요가 있음을 말할 것입니다.

/// <summary> 
/// Can parameters be used for a statement containing a LIMIT? 
/// </summary> 
public override bool SupportsVariableLimit 
{ 
    get { return false; } 
} 

편집

불행하게도, it seems NHibernate에 Linq에이 SupportsVariableLimit 속성을 사용하지 않습니다. 항상 매개 변수를 사용하려고합니다.

여기에 소스 코드가 수정 된 a discussion이 있습니다.

+0

나는 이것을 시도했지만 Dialect.GetLimitString 메서드에서 "Dialect는 가변 제한을 지원하지 않습니다."라는 예외를 얻을 것입니다. - 제한 매개 변수가 null 인 동안 limitparameter 매개 변수가 null이 아니기 때문에 발생합니다 ... – BackendA

+0

@Reimer 내 편집 참조 ... –

+0

소스 코드 수정이 트릭을 수행했습니다. 대단히 감사합니다. – BackendA

관련 문제