С параметром метода
Int16? id
И предложение Linq to SQL where 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
Мой сопоставленный класс имеет идентификатор как Int16, а сама база данных имеет тип столбца как маленький, поэтому почему за кулисами sql считает, что этот параметр является целым числом (Int32), а не маленьким (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. Возможно, это какой-то обман, связанный с тем, что он обернулся? Кажется мне притворным, но единственное, что я могу придумать.