如何在linq中设置参数类型为char(*)类型的nhibernate查询?

时间:2016-07-26 13:19:15

标签: c# sql linq nhibernate profiler

我有一个char(4)类型的Code in Person表列。

人员表是:

enter image description here

人Hbm是:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Domain" namespace="Domain.Model">      
  <class name="Person" table="Person">    

     <property name="Code" >      
        <column name="Code" **sql-type="char(4)"**/>    
     </property>

     ...

  </class>
</hibernate-mapping>

现在我有一个linq到nhibernate查询:

SessionInstance.Query<Person>()
               .Where(x => x.Code == "1234")
               .Select(x => x.Code)
               .ToList();

但不期望sql profiler中的查询跟踪。

exec sp_executesql N'select person_.Code as col_0_0_ from Person person_ where person_.Code=@p0',N'@p0 nvarchar(4000)',@p0=N'1234'

因为@p0的类型不是char(4)@p0的值是N'1234'而不是'1234'

此查询的性能较低: enter image description here

原因是什么?

2 个答案:

答案 0 :(得分:0)

你应该完全没有明确的类型声明。通常,您需要定义数据类型的唯一场景是NHibernate不默认为您打算使用的数据类型(与日期/时间数据类型的某些变体相同)。

答案 1 :(得分:0)

这是NHibernate 4.0中的一个已知限制: https://nhibernate.jira.com/browse/NH-3403