У меня довольно большая модель данных, которую я хочу открыть с помощью OData Web API с использованием протокола OData V4.
Базовые данные хранятся в базе данных SQL Server 2012. В этой базе данных есть много столбцов DateTime.
Поскольку я подключал его, я получил сообщение об ошибке, что System.DateTime не поддерживается.
Итак, вот мой вопрос, что я могу сделать, чтобы мои столбцы DateTime отображались в фиде OData?
ПРИМЕЧАНИЕ. Я не могу вернуться и изменить все мои столбцы на столбцы DateTimeOffset.
Я попытался изменить тип столбца в Entity Framework edmx, но он дал мне эту ошибку:
Указание членства недействительно. Тип "Edm.DateTimeOffset [Nullable = False, DefaultValue =, Precision =]" члена MyPropertyHere в типе "MyProject.MyEntity" несовместим с "SqlServer.datetime [Nullable = False, DefaultValue =, Precision = 3] 'члена' MyColumnName 'в типе' MyDataModel.Store.MyEntity '.
(Bascially syas, что DateTime не совместим с DateTimeOffset.)
Действительно ли команда API Web OData просто не учитывала всех, кто должен использовать тип SQL Server DateTime
?
Обновление. Я нашел обходные пути для этого, но они требуют обновления модели EF для их работы. Я бы предпочел не обновлять несколько сотен свойств индивидуально, если я могу избежать этого.
Обновление:. Эта проблема заставила меня понять, что есть серьезные недостатки в том, как Microsoft управляет своими продуктами OData. Есть много вопросов, но это один из самых вопиющих. В OData Web API отсутствуют огромные недостатки. Транзакции и порядок вставки, являющийся двумя из них. Эти два элемента (которые входят в спецификацию OData и находятся в службах данных WCF до того, как Microsoft их убил) имеют решающее значение для любой реальной системы.
Вместо того, чтобы помещать время в те критические места, где им не хватает функциональности, которая находится в спецификации OData, они решают потратить свое время на удаление функциональных возможностей, которые очень помогли многим разработчикам. Он олицетворяет плохое управление, чтобы уделить приоритетное внимание устранению рабочих функций при добавлении в крайне необходимые функции.
Я пробовал обсудить их с представителем Web API OData, и в конце концов, у меня открылась проблема/билет, который был закрыт через несколько дней. Это был конец того, что они хотели сделать.
Как я уже сказал, есть еще много проблем (не связанных с DateTime, поэтому я не буду перечислять их здесь) с управлением OData Web API. Я был очень сильным сторонником OData, но вопиющие проблемы с управлением веб-интерфейсом OData заставили меня и мою команду/компанию отказаться от нее.
К счастью, обычный Web API можно настроить для использования синтаксиса OData. Это больше подходит для настройки ваших контроллеров, но в конце концов это прекрасно работает. И он поддерживает DateTime. (И, похоже, есть руководство, которое может по крайней мере избегать принятия безумно плохих решений.)