Вопрос

С параметром метода

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. Возможно, это какая-то хитрость, связанная с тем, что ее завернули? Мне кажется это фальшивкой, но я могу думать только об этом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top