LINQ to SQL Int16 é convertido como Int32 Na Command SQL
-
06-07-2019 - |
Pergunta
Com o parâmetro do método
Int16? id
E o Linq para SQL onde cláusula
where !id.HasValue || m.Id == id
O texto de comando resultante para a condição no contexto de dados é
A partir do visualizador:
SELECT [t0].[Id], [t0].[Name], [t0].[IsActive]
FROM [Model] AS [t0]
WHERE (CONVERT(Int,[t0].[Id])) = @p0
-------------------------------
@p0 [Int32]: 5
Meu classe mapeada tem o Id como um Int16 eo banco de dados em si tem o tipo de coluna como um smallint, então por que os bastidores sql acho que o parâmetro é um inteiro (Int32) e não um smallint (Int16) / p>
mapeamento da coluna:
[Column(IsPrimaryKey = true, DbType="SmallInt NOT NULL", CanBeNull=false)]
public Int16 Id { get; set; }
Solução
Alterar a cláusula WHERE para ler
where !id.HasValue || m.Id == id.Value
Há algo sobre a curto anulável que está jogando fora. Eu não sei por que, mas eu corri para este antes e adicionando .Value
vai funcionar.
Outras dicas
Hmmm ... Eu noto que você não está recebendo qualquer representação do id.HasValue! No sql. Talvez isso seja algum tipo de trapaça relacionada com a ficar envolto? Parece falso para mim, mas a única coisa que posso pensar.