0

我一直在使用EF4 /存儲過程/複雜類型一段時間了,但我之前沒有看到過這個問題。EF4 SPROC複雜類型映射 - 問題ROW_NUMBER()

我有一個存儲過程返回一堆字段,映射到一個複雜類型的集合。一直工作正常,直到我介紹這個額外的領域。

它使用ROW_NUMBER從T-SQL(在排名結果使用):

SELECT ... 
     ROW_NUMBER() OVER (ORDER BY [Field1], [Field2]) AS [SearchRank], 
     ... 
FROM @ResultSet 

在我的複雜類型,我有這個設置爲的Int32,並且我還使用非空的POCO的,所以我把這個作爲POCO上的常規int

但是當我嘗試和執行查詢,我得到這個錯誤:

System.InvalidOperationException: The 'SearchRank' property on 'RankedLocationSearchResult' could not be set to a 'Int64' value. You must set this property to a non-null value of type 'Int32'.

我只是不明白這一點。我沒有說過這個屬性/字段是Int64。而我的財產類型'Int32'的非空值。

現在,我確定問題是與ROW_NUMBER()

因爲如果我將該T-SQL更改爲1 AS [SearchRank](硬代碼,用於測試),它工作正常。

這幾乎就像EF看到ROW_NUMBER()返回Int64一樣。

爲什麼?我們是否必須將其作爲32位整數或其他?

任何人有這個問題?

回答

3

因此在讀取MSDN documentation for ROW_NUMBER()後,結果顯示該函數的返回類型爲bigint

所以我不得不將複雜類型更改爲Int64,並將我的POCO屬性更改爲

然後它工作。

1

我正在使用ROW_NUMBER()用於查看唯一ID的視圖。

在我的情況下,即使我將複雜類型更改爲Int64,將POCO屬性更改爲long,它也不起作用。我不得不從我的角度去除ROW_NUMBER()用法。我最終合併了在我的視圖中使用的表格並創建了一個表格。它以這種方式工作。

0

我鑄造的ROW_NUMBER()的返回值在查詢到INT本身如下:

SELECT ... 
     CAST(ROW_NUMBER() OVER (ORDER BY [Field1], [Field2]) AS INT) AS [SearchRank], 
    ... 
FROM @ResultSet