var calls = _session.Query<CallTable>()
                    .Where(x => x.Rated == (short)0)
                    .ToList();

This sql is being generated:
select <....>
from   [CallTable] cdrcalltmp0_
where  cdrcalltmp0_.ClientId = 526 /* @p0 */
       and cast(cdrcalltmp0_.Rated as INT) = 0 /* @p1 */


额定值是数据库中的smallint。为什么要将short转换为int以便与short进行比较?

最佳答案

SmallIntShort是不同的数据类型(即使它们相似,即使SQL处理器在接收到数据时也无法知道这一点。)由于SQL Server没有Short数据类型,因此它大概将其转换为整数。 This似乎支持该假设。

这可能是通过c#从SQL查询短数据类型的默认行为。如果有帮助,请看以下示例以解决类似问题:nhibernate fluent bool to smallint mapping。否则,您可能需要更改连接设置才能执行此操作。

关于c# - nhibernate在where子句中将smallint转换为int,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11010632/

10-12 05:50