ビューにマップされたクラスがあり、患者の記録を検索するために姓と名を検索しています。ビューは最終的に患者テーブルの名字フィールドを調べます (入力によっては他のフィールドも表示される可能性があります)。条件が SQL に変換されると、文字列が nvarchar パラメータとして入力されます。マッピングで既に type="AnsiString" と length="50" を使用していますが、これらを 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 プロファイラーは、nvarchar パラメーターを使用し、すべての文字列の前に N を付けてキャストするように出力 SQL を表示しています。
何か不足していますか?基準またはマッピングに対して他に行う必要があることはありますか? さらに、パラメーターの長さも定数の 50 ではありません。NHibernate 2.1 を使用しています。