【发布时间】:2010-12-13 00:16:16
【问题描述】:
我已经使用 EF4/存储过程/复杂类型有一段时间了,但我以前没有见过这个问题。
我有一个存储过程,它返回一堆字段,映射到复杂类型的集合。在我引入这个额外的字段之前一切正常。
它使用来自 T-SQL 的ROW_NUMBER(用于排名结果):
SELECT ...
ROW_NUMBER() OVER (ORDER BY [Field1], [Field2]) AS [SearchRank],
...
FROM @ResultSet
在我的复杂类型中,我将此设置为不可为空的 Int32,并且我也在使用 POCO,因此我将其设置为 POCO 上的常规 int。 p>
但是当我尝试执行查询时,我得到了这个错误:
System.InvalidOperationException: 'SearchRank' 属性 'RankedLocationSearchResult' 不能 设置为“Int64”值。你必须 将此属性设置为非空值 'Int32' 类型。
我只是不明白。我没有说过这个属性/字段是 Int64。而我的属性是一个“Int32”类型的非空值。
现在,我确定问题出在 ROW_NUMBER()。
因为如果我将 T-SQL 更改为 1 AS [SearchRank](硬代码,用于测试),它可以正常工作。
这几乎就像 EF 看到 ROW_NUMBER() 一样返回 Int64。
为什么?我们必须将其转换为 32 位整数吗?
有人遇到过这个问题吗?
【问题讨论】:
标签: tsql stored-procedures entity-framework-4 row-number complextype