Linq to SQL Int16がSQLコマンドでInt32として変換される
-
06-07-2019 - |
質問
メソッドパラメーターを使用
Int16? id
およびLinq to SQLのwhere句
where !id.HasValue || m.Id == id
データコンテキストの条件の結果のコマンドテキストは次のとおりです
ビジュアライザーから:
SELECT [t0].[Id], [t0].[Name], [t0].[IsActive]
FROM [Model] AS [t0]
WHERE (CONVERT(Int,[t0].[Id])) = @p0
-------------------------------
@p0 [Int32]: 5
マップされたクラスのIDはInt16であり、データベース自体の列タイプはsmallintであるため、SQLの背後でパラメーターがsmallint(Int16)ではなく整数(Int32)と見なされるのはなぜですか?
列のマッピング:
[Column(IsPrimaryKey = true, DbType="SmallInt NOT NULL", CanBeNull=false)]
public Int16 Id { get; set; }
解決
読み取る場所の句を変更する
where !id.HasValue || m.Id == id.Value
nullable shortについて、それを放り出しているものがあります。理由はわかりませんが、以前にこれに遭遇し、 .Value
の追加が機能することがわかりました。
他のヒント
うーん... SQLで!id.HasValueの表現を取得していないことに気付きました。おそらく、これはラップされることに関連したある種の策略でしょうか?私には偽物のように思えますが、私が考えることができる唯一のものです。
所属していません StackOverflow