0

私は EF4/ストアド プロシージャ/複合型をしばらく扱ってきましたが、この問題はこれまで見たことがありません。

複雑な型のコレクションにマップされた一連のフィールドを返すストアド プロシージャがあります。この追加フィールドを導入するまで、すべて正常に機能していました。

T-SQL から使用ROW_NUMBERしています (ランキング結果で使用):

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

私の複合型では、これをnull不可の Int32として設定しており、POCOも使用しているため、これをPOCOの通常intのものとして持っています。

しかし、クエリを実行しようとすると、次のエラーが発生します。

System.InvalidOperationException: 'RankedLocationSearchResult' の 'SearchRank' プロパティを 'Int64' 値に設定できませんでした。このプロパティは、'Int32' 型の null 以外の値に設定する必要があります。

私はそれを理解していません。このプロパティ/フィールドが Int64 だと言ったことはありません。そして、私のプロパティ'Int32' 型の null 以外の値です。

さて、問題は ROW_NUMBER() にあると確信しています

そのT-SQLを1 AS [SearchRank](ハードコード、テスト用)に変更すると、正常に動作するためです。

ROW_NUMBER()EF がInt64 を返すと見なすのとほぼ同じです。

なんで?これを 32 ビット整数か何かとしてキャストする必要がありますか?

誰もこの問題を抱えていましたか?

4

3 に答える 3

3

したがって、 ROW_NUMBER()の MSDN ドキュメントを読んだ後、この関数の戻り値の型はbigintであることがわかりました。

そのため、複合型をInt64に変更し、POCO プロパティをlongに変更する必要がありました。

その後、動作します。

于 2010-12-13T00:21:33.677 に答える
1

ROW_NUMBER()一意のID生成に使用するビューを使用していました。

私の場合、複合型を に変更しInt64、POCO プロパティをに変更しlongても機能しませんでした。

ROW_NUMBER()私は自分の見解から使用法を削除しなければなりませんでした。最後に、ビューで使用されているテーブルをマージして、1 つのテーブルを作成しました。そのように機能しました。

于 2012-10-29T09:02:54.843 に答える
0

次のように、クエリ自体で ROW_NUMBER() の戻り値を INT にキャストしました。

SELECT ... 
       CAST(ROW_NUMBER() OVER (ORDER BY [Field1], [Field2]) AS INT) AS [SearchRank],
   ...
FROM   @ResultSet
于 2013-02-01T16:34:01.710 に答える