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)


mapeamento da coluna:

    [Column(IsPrimaryKey = true, DbType="SmallInt NOT NULL", CanBeNull=false)]
    public Int16 Id { get; set; }
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top