Тип System.DateTime не является поддерживаемым типом. Изменить для использования System.DateTimeOffset
Мы создаем сервис WebApi 2.2 и используем технологии, перечисленные выше. Наше внутреннее хранилище данных MySql 5.6. Мы используем dotConnect для MySql для работы с хранилищем данных. В базе данных есть столбец RowVersion с типом отметки времени. В EF я успешно сгенерировал модель, но заметил, что для RowVersion установлено значение DateTime. Когда я запускаю WebApi, я получаю следующее исключение времени выполнения, поэтому мне нужно изменить тип на DateTimeOffset, потому что метка времени недоступна.
В нашем приложении мы будем использовать RowVersion с ETags для обработки параллелизма. Итак, мы будем читать только RowVersion в нашем приложении; База данных будет автоматически обновлять RowVersion всякий раз, когда происходит вставка или обновление.
Я не знаю, как исправить эту проблему... Возможно, есть какой-то способ добавить автоматическое преобразование типов, поэтому RowVersion в модели представляет собой Int64, и мы автоматически конвертируем между Int64 и Timestamp, отправляя Timestamp.value в наш приложение. Мы только читаем это, так что это кажется разумным.
Когда я изменяю RowVersion на Int64 в модели EF и собираю приложение, я получаю следующую ошибку:
Ошибка 1 Ошибка 2019: указанное сопоставление элемента недопустимо. Тип 'Edm.Int64[Nullable=True,DefaultValue=]' члена 'Version' в типе 'Model.customer' не совместим с 'Devart.Data.MySql.timestamp[Nullable=True,DefaultValue=,Precision=0]'члена' Версия 'в типе'Model.Store.customers'. C:\PROJECTS\ServiceMySql\ServiceMySql\Models\Model.edmx 898 17 ServiceMySql
Я очень признателен за вашу помощь, чтобы выяснить, как решить эту проблему.
Спасибо за ваше время и предложения,
Майк
Исключение, упомянутое в начале этой публикации:
System.ArgumentException не был обработан кодом пользователя
HResult=-2147024809 Сообщение = Тип 'System.Nullable1[[System.DateTime, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]' of property 'Version' in the 'XXXXServiceMySql.Models.customer' type is not a supported type. Change to use 'System.DateTimeOffset' or ignore this type by calling Ignore<XXXXServiceMySql.Models.customer>() on 'System.Web.OData.Builder.ODataModelBuilder'. Parameter name: navigationProperty Source=System.Web.OData
1 configurationCallback) в XXXXServiceMySql.WebApiApplication.Application_Start() в c:\PROJECTS\XXXXServiceMySql\XXXXServiceMySql\Global.asax.cs: строка 17
ParamName=navigationProperty StackTrace: at System.Web.OData.Builder.EntityTypeConfiguration.AddNavigationProperty(PropertyInfo navigationProperty, EdmMultiplicity multiplicity, Boolean containsTarget) at System.Web.OData.Builder.EntityTypeConfiguration.AddNavigationProperty(PropertyInfo navigationProperty, EdmMultiplicity multiplicity) at System.Web.OData.Builder.ODataConventionModelBuilder.MapEntityType(EntityTypeConfiguration entity) at System.Web.OData.Builder.ODataConventionModelBuilder.MapType(StructuralTypeConfiguration edmType) at System.Web.OData.Builder.ODataConventionModelBuilder.MapTypes() at System.Web.OData.Builder.ODataConventionModelBuilder.GetEdmModel() at XXXXServiceMySql.WebApiConfig.GenerateEdmModel() in c:\PROJECTS\XXXXServiceMySql\XXXXServiceMySql\App_Start\WebApiConfig.cs:line 89 at XXXXServiceMySql.WebApiConfig.Register(HttpConfiguration config) in c:\PROJECTS\XXXXServiceMySql\XXXXServiceMySql\App_Start\WebApiConfig.cs:line 55 at System.Web.Http.GlobalConfiguration.Configure(Action
InnerException:
1 ответ
Я считаю, что, начиная с последней версии WebApi OData v4 (5.4.0), DateTime поддерживается в определенной степени. Он по-прежнему определяется как DateTimeOffset в метаданных, но по крайней мере ваша модель может работать с DateTime. См. http://odata.github.io/WebApi/datetime-support/ для получения более подробной информации.