Linq to SQL Int16 преобразуется в Int32 в команде SQL
-
06-07-2019 - |
Вопрос
С параметром метода
Int16? id
И пункт Linq to SQL, где
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 считает параметр целым числом (Int32), а не smallint (Int16)? р> <Ч>
Сопоставление столбцов:
[Column(IsPrimaryKey = true, DbType="SmallInt NOT NULL", CanBeNull=false)]
public Int16 Id { get; set; }
Решение
Измените предложение where на
where !id.HasValue || m.Id == id.Value
Есть что-то в обнуляемом коротком, что выбрасывает это. Я не уверен, почему, но я столкнулся с этим раньше и обнаружил, что добавление .Value
будет работать.
Другие советы
Хммм ... Я заметил, что вы не получаете никакого представления! id.HasValue в sql. Возможно, это какая-то хитрость, связанная с тем, что ее завернули? Мне кажется это фальшивкой, но я могу думать только об этом. Р>