Я уже некоторое время работаю с EF4 / Хранимыми процедурами / Сложными типами, но я раньше не сталкивался с этой проблемой.
У меня есть сохраненный процесс, который возвращает набор полей, сопоставленных с коллекцией сложных типов. Все работало нормально, пока я не ввел это дополнительное поле.
Используется ROW_NUMBER
из T-SQL (используется в результатах ранжирования):
SELECT ...
ROW_NUMBER() OVER (ORDER BY [Field1], [Field2]) AS [SearchRank],
...
FROM @ResultSet
В моем сложном типе я установил не обнуляемый Int32 , и я также использую POCO, поэтому у меня это как обычный int
в POCO.
Но когда я пытаюсь выполнить запрос, я получаю эту ошибку:
System.InvalidOperationException:
Недвижимость "SearchRank" на
«RankedLocationSearchResult» не удалось
установить значение Int64. Вы должны
установите для этого свойства ненулевое значение
типа Int32.
Я просто не понимаю. Нигде я не говорил, что это свойство / поле Int64. И мое свойство является ненулевым значением типа Int32.
Теперь Я уверен, что проблема в ROW_NUMBER () .
Потому что, если я изменю этот T-SQL на 1 AS [SearchRank]
(жесткий код, для тестирования), он будет работать нормально.
Это почти так же, как EF видит ROW_NUMBER()
как возвращение Int64.
Почему? Должны ли мы приводить это как 32-разрядное целое число или что-то подобное?
У кого-нибудь была эта проблема?