Nhibernate在WHERE子句中将smallint转换为int
本文关键字:smallint 转换 int WHERE 子句 Nhibernate | 更新日期: 2023-09-27 18:37:11
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 转换为 int 以便与 short 进行比较?
SmallInt
和Short
是不同的数据类型(即使它们相似,SQL 处理器在收到数据时也无法知道这一点。由于 SQL 服务器没有Short
数据类型,因此它可能会将其转换为整数。这似乎支持了这一假设。
这可能是从 SQL 到 c# 查询的短数据类型的默认行为。看看这个例子,看看如何修复类似的东西,如果它有帮助的话:nhibernate fluent bool to smallint mapping。否则,您可能需要更改连接的设置才能执行此操作。