3
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。为什么要将 smallint 转换为 int 以便与 short 进行比较?

4

1 回答 1

0

SmallInt并且Short是不同的数据类型(即使它们相似,SQL 处理器在收到数据时也无法知道这一点。)由于 SQL Server 没有Short数据类型,因此它可能会将其转换为整数。似乎支持了这个假设。

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

于 2012-06-22T14:18:48.820 回答