NHibernate将字符串参数转换为nvarchar而不是varchar。我怎么能阻止这个?

时间:2012-02-08 23:41:37

标签: nhibernate nhibernate-mapping nhibernate-criteria

我有一个映射到视图的类,我正在搜索名字和姓氏,以便搜索患者记录。该视图最终查看患者表上的名字和姓氏字段(可能还有其他字段取决于输入)。当条件转换为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事件探查器将输出SQL显示为使用nvarchar参数,并在我的所有字符串前加上N来强制转换它们。

我错过了什么吗?还有什么需要在标准或映射上完成吗?另外,参数的长度也不是常数50。我正在使用NHibernate 2.1。

2 个答案:

答案 0 :(得分:2)

尝试在映射中使用sql-type属性:

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

您遇到了哪些性能问题?对我而言,将字符串视为unicode似乎不太会影响性能。

答案 1 :(得分:2)

试试这个

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