Pregunta

Con el parámetro del método

Int16? id

Y la cláusula Linq to SQL where

where !id.HasValue || m.Id == id

El texto de comando resultante para la condición en el contexto de datos es

Desde el visualizador:

SELECT [t0].[Id], [t0].[Name], [t0].[IsActive]
FROM [Model] AS [t0]
WHERE (CONVERT(Int,[t0].[Id])) = @p0
-------------------------------
@p0 [Int32]: 5

Mi clase asignada tiene el Id como Int16 y la base de datos en sí tiene el tipo de columna como smallint, entonces, ¿por qué el sql detrás de escena piensa que el parámetro es un entero (Int32) y no un smallint (Int16)?


Asignación de columnas:

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

Solución

Cambiar la cláusula where para leer

where !id.HasValue || m.Id == id.Value

Hay algo en el corto anulable que lo está descartando. No estoy seguro de por qué, pero me encontré con esto antes y descubrí que agregar .Value funcionará.

Otros consejos

Hmmm ... noto que no obtienes ninguna representación de! id.HasValue en el sql. ¿Quizás este es algún tipo de truco relacionado con que se envuelva? Me parece falso, pero lo único en lo que puedo pensar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top