OData v4 не поддерживает Nullable ‹DateTime›?

Ошибка сервера в приложении "/".


Тип 'System.Nullable`1 [[System.DateTime, mscorlib, Version = 4.0.0.0, Culture = нейтральный, PublicKeyToken = b77a5c561934e089]]' свойства DataAlteracaoDate в типе 'WebAPIOData.Models.Categoria' не является поддерживаемый тип. Имя параметра: navigationProperty

Трассировки стека:

[ArgumentException: тип 'System.Nullable`1 [[System.DateTime, mscorlib, Version = 4.0.0.0, Culture = нейтральный, PublicKeyToken = b77a5c561934e089]]' свойства DataAlteracaoDate в типе 'WebAPIOData.Models.Categoria' не поддерживается. Имя параметра: navigationProperty]
System.Web.OData.Builder.EntityTypeConfiguration.AddNavigationProperty (PropertyInfo navigationProperty, EdmMultiplicity multiplicity, Boolean containsTarget) +1054
System.Web.OData.Builder.EntityPropertyNavigationTypeConfiguration.AddNavigationProperty (свойство) множественность) +47
System.Web.OData.Builder.ODataConventionModelBuilder.MapEntityType (сущность EntityTypeConfiguration) +447
System.Web.OData.Builder.ODataConventionModelBuilder.MapType (StructuralTypeConfiguration) edmType .OData.Builder.ODataConventionModelBuilder.MapTypes () +104
System.Web.OData.Builder.ODataConventionModelBuilder.GetEdmModel () +195 WebAPIOData.WebApiConfig.GetModel () в c: \ Projetos \ Web \ SmartSales \ WebAPIOData \ App_Start \ WebApiConfig.cs: 65 WebAPIOData.WebApiConfig.Register (конфигурация HttpConfiguration) в c: \ Projetos \ HND022Git \ SmartSales \ Implementacao \ Codigo \ Web \ SmartSales \ WebAPIOData \ App_Start \ WebApiConfig.cs: 25 WebAPIOData.WebApiApplication.Application_Start () в c: \ Projetos \ HND022Git \ SmartSales \ Implementacao \ Codigo \ Web \ SmartSales \ WebAPIOData \ Global.

[HttpException (0x80004005): тип 'System.Nullable`1 [[System.DateTime, mscorlib, Version = 4.0.0.0, Culture = нейтральный, PublicKeyToken = b77a5c561934e089]]' свойства DataAlteracaoDate в 'WebAPIOData.Models. Тип категорий не поддерживается. Имя параметра: navigationProperty]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode (контекст HttpContext, приложение HttpApplication) +9936761
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS (IntPtrfoContext)
appContext], HttpFo11 [контекста приложения], HttpIntegratedContext, HttpFO11 [контекст] > System.Web.HttpApplication.InitSpecial (состояние HttpApplicationState, обработчики MethodInfo [], IntPtr appContext, контекст HttpContext) +172
System.Web.HttpApplicationFactory.GetSpecialApplicationInstance (IntPtr appContext, HttpContext Системный контекст) .Hosting.PipelineRuntime.InitializeApplication (IntPtr appContext) +296

[HttpException (0x80004005): тип 'System.Nullable`1 [[System.DateTime, mscorlib, Version = 4.0.0.0, Culture = нейтральный, PublicKeyToken = b77a5c561934e089]]' свойства 'DataAlteracaoDate' в 'WebAPIOData.Models. Тип категорий не поддерживается. Имя параметра: navigationProperty]
System.Web.HttpRuntime.FirstRequestInit (контекст HttpContext) +9915300 System.Web.HttpRuntime.EnsureFirstRequestInit (контекст HttpContext) +101 System.Web.HttpRuntime.ProcessRequest INotextrWorks, + HttpRuntime.

У моего класса есть свойство «DataAlteracaoDate» типа Nullable<DateTime>

Я устанавливаю объект в ODataModelBuilder следующим образом:

builder.EntitySet<Categoria>("Categorias").EntityType.HasKey(t => t.IdCategoria);

Я использую последнюю версию для предварительной версии Microsoft.AspNet.OData.5.2.0-rc-140512 в своем приложении.

Есть ли у кого-нибудь предложения?


person Marcelo Gonzaga Silva    schedule 13.05.2014    source источник
comment
Проголосуйте за них, чтобы вернуть поддержку типа DateTime aspnetwebstack.codeplex.com/workitem/2072 и aspnet.uservoice.com/forums/147201-asp-net-web-api/suggestions/   -  person Rory    schedule 09.08.2014


Ответы (1)


DateTime больше не поддерживается в OData v4. Он поддерживает DateTimeOffset, допускающий значение NULL или нет.

person Tan Jinfu    schedule 13.05.2014
comment
Если я использую OData v4 в своем приложении, мне придется изменить все типы DateTime для DateTimeOffSet, в том числе в моей базе данных? - person Marcelo Gonzaga Silva; 15.05.2014
comment
Я не думаю, что вам нужно менять Datetime в базе данных на DatetimeOffset. В действиях контроллера вы должны изменить данные на DateTime, прежде чем сохранять их в базе данных, и изменить их обратно на DateTimeOffset после извлечения из базы данных. - person Tan Jinfu; 15.05.2014
comment
Есть ли общий способ сделать это? - person Jay Traband; 01.08.2014
comment
Я не знаю. Насколько я знаю, все варианты здесь: ‹stackoverflow.com/questions/24829422/›. - person Tan Jinfu; 01.08.2014