Der Typ System.DateTime ist kein unterstützter Typ. Ändern Sie, um System.DateTimeOffset zu verwenden

9

Wir erstellen einen WebApi 2.2-Service und verwenden die oben aufgeführten Technologien. Unser Backend-Datenspeicher ist MySql 5.6. Wir verwenden dotConnect für MySql, um mit dem Datenspeicher zu arbeiten. In der Datenbank gibt es eine RowVersion-Spalte mit einem Typ von Timestamp. In EF habe ich das Modell erfolgreich generiert, aber ich habe festgestellt, dass RowVersion auf DateTime gesetzt ist. Wenn ich das WebApi ausführe, erhalte ich die folgende Laufzeitausnahme, deshalb muss ich den Typ zu DateTimeOffset ändern, weil Timestamp nicht verfügbar ist.

In unserer Anwendung werden wir die RowVersion mit ETags zur Parallelitätsbehandlung verwenden. Wir werden also nur die RowVersion in unserer Anwendung lesen; Die Datenbank aktualisiert automatisch die RowVersion, sobald ein Einfügen oder eine Aktualisierung erfolgt.

Ich weiß nicht, wie ich dieses Problem beheben kann ... Vielleicht gibt es eine Möglichkeit, eine automatische Typumwandlung hinzuzufügen, so dass die RowVersion im Modell ein Int64 ist und wir automatisch zwischen dem Int64 und Timestamp konvertieren, indem wir den Timestamp senden. Wert für unsere Anwendung. Wir lesen es nur, also scheint das vernünftig.

Wenn ich im EF-Modell die RowVersion in Int64 ändere und die Anwendung erstelle, erhalte ich den folgenden Fehler:

  

Fehler 1 Fehler 2019: Die angegebene Memberzuordnung ist nicht gültig. Der Typ   'Edm.Int64 [Nullable = True, DefaultValue =]' des Members 'Version' im Typ   'Model.customer' ist nicht kompatibel mit   'Devart.Data.MySql.timestamp [Nullable = True, DefaultValue =, Genauigkeit = 0]'   von Mitglied 'Version' in Typ   "Model.Store.customers". C: \ PROJEKTE \ ServiceMySql \ ServiceMySql \ Models \ Model.edmx 898 17 ServiceMySql

Ich würde Ihre Hilfe sehr schätzen, um herauszufinden, wie Sie dieses Problem lösen können.

Danke für Ihre Zeit und Vorschläge,

Mike

Ausnahme am Anfang dieses Beitrags erwähnt:

  

System.ArgumentException wurde vom Benutzercode
nicht behandelt   HResult = -2147024809 Nachricht = Der Typ   'System.Nullable 1[[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
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
1 KonfigurationCallback)          bei XXXXServiceMySql.WebApiApplication.Application_Start () in c: \ PROJECTS \ XXXXServiceMySql \ XXXXServiceMySql \ Global.asax.cs: Zeile 17
  InnerException:

    
A Bit of Help 07.08.2014, 16:28
quelle

1 Antwort

1

Ich glaube, dass DateTime ab der neuesten Version WebApi OData v4 (5.4.0) zu einem gewissen Grad unterstützt wird. Es ist immer noch als DateTimeOffset in den Metadaten definiert, aber zumindest kann Ihr Modell mit DateTime umgehen. Weitere Informationen finden Sie Ссылка .

    
Brad 08.02.2015 04:37
quelle