2016-07-26 40 views
0

我有char(4)類型的代碼人表中的列。如何在linq中將參數類型設置爲nhibernate查詢char(*)類型?

人表:

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的查詢:在SQL

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

但跟蹤查詢分析器不是預期的。

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

因爲@p0類型不是char(4)@p0N'1234',而不是'1234'

而這種查詢的性能較低: enter image description here

是什麼原因?

回答

0

你應該完全拋棄顯式類型聲明。通常情況下,需要定義數據類型的唯一場景是NHibernate不會默認使用您打算使用的數據類型(與日期/時間數據類型的某些變體相同)。

相關問題