Linq to SQL Int16在SQL命令中转换为Int32

使用方法参数

Int16? id 

而Linq to SQL where子句

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

生成的数据上下文中的条件的命令文本是

来自可视化器:

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

我的映射类将Id作为Int16,数据库本身的列类型为smallint,那么为什么幕后的sql认为参数是整数(Int32)而不是smallint(Int16)?


列映射:

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

更改要读取的where子句

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

关于可空的短片有一些东西正在抛弃它。 我不知道为什么,但我之前碰到了这个并发现添加.Value会起作用。

嗯……我注意到你没有在sql中获得任何!id.HasValue的表示。 也许这是与被包裹相关的某种诡计? 对我来说似乎是假的,但我唯一能想到的就是。