如何将 linq 中的参数类型设置为 char(*) 类型的休眠查询?
Posted
技术标签:
【中文标题】如何将 linq 中的参数类型设置为 char(*) 类型的休眠查询?【英文标题】:How to set type of parameter in linq to nhibernate query for char(*) type? 【发布时间】:2016-11-30 04:02:34 【问题描述】:我有一个按 char(4) 类型在 Person 表中的 Code 列。
人表是:
人 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 to 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'
而且此查询的性能较低:
什么原因?
【问题讨论】:
【参考方案1】:省略显式类型声明应该完全没问题。通常,您需要定义数据类型的唯一场景是 NHibernate 不默认为您打算使用的数据类型(常见于日期/时间数据类型的某些变体)。
【讨论】:
【参考方案2】:这是 NHibernate 4.0 中的一个已知限制: https://nhibernate.jira.com/browse/NH-3403
【讨论】:
以上是关于如何将 linq 中的参数类型设置为 char(*) 类型的休眠查询?的主要内容,如果未能解决你的问题,请参考以下文章
无法通过 Linq 方法 Contains() 针对 char 数组检查字符串,因为该数组不是 String 类型,转换为 String 类型失败
C++ 编译时提示:不能将参数 1 从“char [6]”转换为“LPCTSTR”
如何使用 linq 将 DATETIME 类型的列转换为字符串
在 C 中,如何修复此警告:格式“%s”需要“char *”类型的参数,但参数 3 的类型为“char (*)[100]