LINQ에서 SQL int16은 SQL 명령에서 int32로 변환됩니다.
-
06-07-2019 - |
문제
메소드 매개 변수와 함께
Int16? id
그리고 linq에서 sql where clause
where !id.HasValue || m.Id == id
데이터 컨텍스트의 조건에 대한 결과 명령 텍스트는 다음과 같습니다.
Visualizer에서 :
SELECT [t0].[Id], [t0].[Name], [t0].[IsActive]
FROM [Model] AS [t0]
WHERE (CONVERT(Int,[t0].[Id])) = @p0
-------------------------------
@p0 [Int32]: 5
내 맵핑 클래스는 ID를 int16으로 가지고 있고 데이터베이스 자체는 열 유형을 smallint로 가지고 있으므로 왜 뒤에서 SQL이 매개 변수가 정수 (int32)가 아니라고 생각하는 이유는 무엇입니까 (int16).
열 매핑 :
[Column(IsPrimaryKey = true, DbType="SmallInt NOT NULL", CanBeNull=false)]
public Int16 Id { get; set; }
해결책
읽을 위치 조항을 변경하십시오
where !id.HasValue || m.Id == id.Value
무효가되는 단편에 대해서는 그것을 버리는 것이 있습니다. 왜 그런지 잘 모르겠지만, 전에 이것에 뛰어 들어 추가를 발견했습니다. .Value
작동합니다.
다른 팁
흠 ... 나는 당신이 SQL에서! id.hasvalue를 표현하지 않는다는 것을 알았습니다. 아마도 이것은 포장되는 것과 관련된 일종의 속임수일까요? 나에게 가짜처럼 보이지만 내가 생각할 수있는 유일한 것.
제휴하지 않습니다 StackOverflow