InvalidCastException при перечислении QueryOperationResponse - PullRequest
0 голосов
/ 03 декабря 2018

На прошлой неделе мы столкнулись со странной проблемой при разработке нового проекта для некоторых внутренних целей.Мы используем хранимую процедуру в базе данных SQL Azure для получения некоторых данных.Затем Entity Framework для сопоставления базы данных с моделью контекста службы данных.Затем это отображается как служба OData, шаблон и т. Д. И т. Д. *

. От клиента мы получаем такие результаты:

OurDataServiceContext.Execute<OurResultsModel>(oDataQueryUri, "GET", false);

Ничего особенного или интересного здесь нет.Фактически, идентичный код можно найти в другом месте нашего проекта.Однако в этом случае исключение будет происходить всякий раз, когда перечисляются результаты QueryOperationResponse.

 System.InvalidCastException: 'Unable to cast object of type 'System.String' to type 'OurResultsModel'

Это поставило меня в тупик и двух других членов команды.Имейте в виду, что в хранимой процедуре нет ничего плохого: мы можем выполнить ее и получить ожидаемые результаты.Также ничего не пошло не так с самой службой OData: запросы Fiddler, запросы браузера - нет проблем!В конце концов я создал новый класс «OurResultsModel2», а затем:

    OurDataServiceContext.IgnoreMissingProperties = true;
    OurDataServiceContext.Execute<OurResultsModel2>(oDataQueryUri, "GET", false); 

Я намеревался удалить свойства, пока он не заработал.К счастью, мне удалось перечислить результаты с первой попытки.Я также смог скопировать InvalidCastException с этим типом.Итак, вот мой вопрос: что?Что в мире я только что сделал, чтобы это исправить?

Еще несколько деталей ...

Наша хранимая процедура выглядит примерно так ...

SELECT mt.ID AS ID, mc.Qty AS MorningCount, 
[...another couple of nullable int columns, and a descriptive string...] 
FROM [...a derived table grouped by mt.ID...]

Мы изменили «mt.ID AS ID» на «mt»..ID AS MealID "и все было хорошо.Итак, что опять?Кажется, я не могу найти ни одного правила, которое говорит «не называйте столбец идентификатора хранимой процедуры» по отношению к WCF, OData или EntityFramework.Я не могу найти ни одно задокументированное правило, или - в этом отношении - любые подобные проблемы здесь или любые другие форумыТак что, вероятно, я что-то неправильно понимаю.И определенно есть кое-что, чего я не знаю.

Надеюсь, кто-нибудь поможет мне разобраться!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...