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 */

Rated は、データベース内の smallint です。short と比較するために smallint を int にキャストするのはなぜですか?

4

1 に答える 1

0

SmallIntShortは異なるデータ型です (類似していても、SQL プロセッサがデータを受信したときにこれを知る方法はありません)。SQL サーバーにはShortデータ型がないため、おそらく整数に変換されます。これはその仮定を支持しているようです。

これはおそらく、C# を介して SQL からクエリされる短いデータ型の既定の動作です。役立つ場合は、同様のものを修正する方法のこの例を見てください: nhibernate fluent bool to smallint mapping。それ以外の場合は、これを行うために接続の設定を変更する必要がある場合があります。

于 2012-06-22T14:18:48.820 に答える