2012-02-08 2 views
3

클래스를 뷰에 매핑하고 성 및 이름을 검색하여 환자 레코드를 검색합니다. 보기는 궁극적으로 환자 표의 성과 이름 필드를 확인합니다 (입력에 따라 다른 필드도 가능). 기준이 SQL로 변환되면 내 문자열이 nvarchar 매개 변수로 입력됩니다. 나는 이미 매핑에 type = "AnsiString"과 length = "50"을 사용했지만 여전히 이들을 nvarchar로 변환하여 쿼리에서 성능이 저하되고 있습니다. NVARCHAR 매개 변수를 사용하여 그들을 캐스팅 N 내 모든 문자열을 접두어로NHibernate에서 varchar 대신 nvarchar로 문자열 매개 변수를 변환합니다. 이걸 어떻게 막을 수 있니?

<class name="PatientSearchResult" table="vw_PatientSearch" mutable="false" > 
    <id name="Id" type="Guid" column="PatientId"/> 

    <property name="MedicalRecordNumber" type="AnsiString" length="50" /> 
    <property name="Title" /> 
    <property name="FirstName" type="AnsiString" length="50" /> 
    <property name="MiddleName" /> 
    <property name="LastName" type="AnsiString" length="50" /> 
    <property name="Nickname" /> 
    <property name="Suffix" /> 
    <property name="DateOfBirth" /> 
    <property name="IsRestricted" /> 
    <property name="IsDeleted" /> 

    <component name="Address"> 
     <property name="StreetAddress1" /> 
     <property name="StreetAddress2" /> 
     <property name="City" /> 
     <property name="State" /> 
     <property name="PostalCode" /> 
    </component> 

    </class> 

SQL 프로파일 러는 출력 SQL을 보이고있다.

나는 뭔가를 놓친가요? 기준 또는 매핑에서 수행해야 할 다른 작업이 있습니까? 또한 매개 변수의 길이는 상수 50이 아닙니다. 나는 NHibernate 2.1을 사용하고있다.

답변

2

당신의 매핑에서 SQL-type 속성을 사용해보십시오 :

<property name="FirstName" length="50" /> 
    <column sql-type="varchar(50)" /> 
</property> 

당신이 가진 무엇 성능 문제? 문자열을 유니 코드로 취급하면 성능에 많은 영향을 미칠 것 같지 않습니다.

+0

감사를 사용해보십시오. 성능 문제는 필자의 직접 작성한 SQL이 사용하는 것보다 훨씬 빈약 한 실행 계획을 사용하는 SQL Server의 결과입니다. 주물은 붉은 청어이었다. –

+0

열 유형이 nvarchar 인 경우 어떻게됩니까? – numerah

+0

@numerah XML에서 매핑하는 방법을 잘 모르겠지만 SQL 형식 = "nvarchar (50)"도 있습니다. 확실히 여기에 정의 된 ansi 및 non-ansi 문자열 유형이 있습니다. https://github.com/nhibernate/nhibernate-core/tree/master/src/NHibernate/SqlTypes – AlexCuse

2

은 끝이

<property name="FirstName" length="50"> 
    <column name="first_name" sql-type="varchar(50)" /> 
</property> 
+0

감사합니다. 전에 이것을 시도했을 때 작동하지 않았습니다. 이는 태그에서 SQL 유형을 사용할 수 없기 때문에 태그에 있습니다. –