Linq to SQL Int16 Ruft als Int32 In SQL-Befehl konvertiert
-
06-07-2019 - |
Frage
Mit dem Methodenparameter
Int16? id
Und die LINQ to SQL-WHERE-Klausel
where !id.HasValue || m.Id == id
Der resultierende Befehlstext für den Zustand im Datenkontext ist
Von der Visualizer:
SELECT [t0].[Id], [t0].[Name], [t0].[IsActive]
FROM [Model] AS [t0]
WHERE (CONVERT(Int,[t0].[Id])) = @p0
-------------------------------
@p0 [Int32]: 5
Meine abgebildet Klasse hat die Id als Int16 und die Datenbank selbst den Spaltentyp als Smallint hat, also warum nicht die hinter den Kulissen sql denkt, der Parameter ist eine ganze Zahl (Int32) und kein smallint (Int16) / p>
Spaltenzuordnung:
[Column(IsPrimaryKey = true, DbType="SmallInt NOT NULL", CanBeNull=false)]
public Int16 Id { get; set; }
Lösung
Die Änderung where-Klausel lesen
where !id.HasValue || m.Id == id.Value
Es ist etwas über die Nullable-kurz, dass es weg wirft. Ich bin mir nicht sicher, warum, aber ich lief dies in vor und fand das Hinzufügen .Value
funktionieren wird.
Andere Tipps
Hmmm ... Ich merke, dass Sie gar keine Darstellung des! Id.HasValue in der SQL bekommen. Vielleicht ist dies eine Art von Betrug zu, dass im Zusammenhang eingewickelt zu werden? Scheint mir unecht, aber das einzige, was ich mir vorstellen kann.