Question

Avec le paramètre de méthode

Int16? id

Et la clause Linq to SQL où la clause

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

Le texte de commande résultant de la condition dans le contexte de données est

.

À partir du visualiseur:

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

Ma classe mappée a l'Id en tant qu'Int16 et la base de données elle-même a le type de colonne en tant que smallint, alors pourquoi le créateur d'arrière-plans pense-t-il que le paramètre est un entier (Int32) et non un smallint (Int16)? <

Mappage de colonnes:

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

La solution

Modifiez la clause where pour lire

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

Il y a quelque chose dans le court-circuit annulable qui le jette. Je ne sais pas pourquoi, mais je me suis déjà heurté à cela et je me suis aperçu que l'ajout de .Value fonctionnerait.

Autres conseils

Hmmm ... Je remarque que vous n'obtenez aucune représentation de la! id.HasValue dans le SQL. Peut-être est-ce une sorte de ruse liée à l’emballage? Cela me semble faux, mais la seule chose à laquelle je peux penser.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top