我已经使用 EF4/存储过程/复杂类型有一段时间了,但我以前没有见过这个问题。
我有一个存储过程,它返回一堆字段,映射到复杂类型的集合。在我介绍这个额外的字段之前一切正常。
它使用ROW_NUMBER
来自 T-SQL(用于排名结果):
SELECT ...
ROW_NUMBER() OVER (ORDER BY [Field1], [Field2]) AS [SearchRank],
...
FROM @ResultSet
在我的复杂类型中,我将此设置为不可为空的 Int32,并且我也在使用 POCO,因此我将其作为int
POCO 的常规设置。
但是当我尝试执行查询时,我得到了这个错误:
System.InvalidOperationException:“RankedLocationSearchResult”上的“SearchRank”属性无法设置为“Int64”值。您必须将此属性设置为“Int32”类型的非空值。
我只是不明白。我没有说过这个属性/字段是 Int64。我的属性是“Int32”类型的非空值。
现在,我确定问题出在 ROW_NUMBER()上。
因为如果我将该 T-SQL 更改为只是1 AS [SearchRank]
(硬代码,用于测试),它就可以正常工作。
这几乎就像 EF 认为ROW_NUMBER()
返回 Int64 一样。
为什么?我们是否必须将其转换为 32 位整数或其他内容?
有人有这个问题吗?