关于c#:Linq to SQL Int16在SQL命令中转换为Int32

Linq to SQL Int16 Gets Converted as Int32 In SQL Command

使用方法参数

1
Int16? id

以及linq to sql where子句

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

数据上下文中条件的结果命令文本为

从可视化工具:

1
2
3
4
5
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)?

列映射:

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


将where子句更改为read

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

空的空头有点让人不快。我不知道为什么,但我之前遇到过这个问题,发现添加.Value是可行的。


六羟甲基三聚氰胺六甲醚。。。我注意到你没有得到任何代表!SQL中的id.hasValue。也许这是某种与包裹有关的诡计?在我看来是假的,但这是我唯一能想到的。