私は 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 ビット整数か何かとしてキャストする必要がありますか?
誰もこの問題を抱えていましたか?