Domanda

Con il parametro del metodo

Int16? id

E la clausola Linq to SQL where

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

Il testo del comando risultante per la condizione nel contesto dei dati è

Dal visualizzatore:

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

La mia classe mappata ha l'ID come Int16 e il database stesso ha il tipo di colonna come smallint, quindi perché sql dietro le quinte pensa che il parametro sia un intero (Int32) e non un smallint (Int16)?


Mappatura colonne:

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

Soluzione

Modifica la clausola where da leggere

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

C'è qualcosa nel breve nulla che lo sta gettando via. Non sono sicuro del perché, ma mi sono imbattuto in questo prima e ho scoperto che l'aggiunta di .Value funzionerà.

Altri suggerimenti

Hmmm ... noto che non stai ottenendo alcuna rappresentazione di! id.HasValue in sql. Forse questa è una sorta di inganno correlato a quello che viene impacchettato? Mi sembra falso, ma l'unica cosa a cui riesco a pensare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top