2014-04-24 1 views
7

Das Feld in Oracle-Datenbank mit dem Typ number(10), die größer ist als .net Int32 reichen. Ich verwende jetzt Entity-Framework, um Daten aus dieser Tabelle abzurufen und sie der Datenbankentität dieser Tabelle zuzuordnen. Aber, ich habe diesen Fehler, wenn ich die Daten holen:Entity-Framework, Karte Orakel-Datenbank-Typ-Nummer (10) zu .net Int32

var competitions = db.PKG_API_PORTAL_SP_GETFBCOMPETITION().ToList(); 

Der Typ des Schlüsselfeld ‚‘ erwartet wird, zu sein ‚System.Int32‘, aber der angegebene Wert tatsächlich vom Typ ‚System .Int64 '.

Ich fand diese Frage Oracle Data Provider to CLR type mapping

und hier ist der Artikel zu erklären, wie der Datentyp http://www.devart.com/dotconnect/oracle/docs/DataTypeMapping.html

Aber jetzt brauche ich eine Lösung übersetzt worden, um dieses Problem zu lösen.

+0

Ich zweitens diese Frage. Ich würde es hassen, emdx etc. manuell zu ändern. – ginalster

+0

haben Sie versucht, das Schlüsselfeld zu deklarieren, wo Sie es explizit als int 64 speichern? – jclozano

+0

haben Sie in Betracht gezogen, eine Ansicht zu verwenden, um die Nummer (10) einem anderen Datentyp zuzuordnen (d. H. Nummer (8) oder Ähnliches)? –

Antwort

0

Ich nehme an, da Sie DotConnect For Oracle mit EF verwenden, dass Sie einen Refcursor von der Funktion/SP, die auf einen Datentyp projiziert wird, zurückgeben.

Sie haben drei Optionen, um das Problem zu beheben: 1- Ändern Sie den Typ im Objekt, das Sie einem Int64 zuordnen. Dies ist die einfachste Lösung. Wenn Sie den Entitätsentwickler verwenden, wählen Sie einfach den Typ in Ihrem Mapping aus, ändern Sie den Typ auf "int64", klicken Sie auf "OK" und generieren Sie Ihre Klassen neu.

2- Ändern Sie den zurückgegebenen Refcursor, um die Nummer (10) auf eine Nummer (9) zu reduzieren. Dies wird wahrscheinlich die Leistung beeinträchtigen und letztendlich etwas kaputt machen, also würde ich es nicht empfehlen.

0

Jede Spalte vom Typ NUMBER (n) repräsentiert einen INT64. "n" fungiert als Einschränkung für die Tabelle, aber alle darin enthaltenen Daten haben die gleiche Größe. Sie sollten lieber auf der Client-Seite zu einem Int64-Typ wechseln. Prost!

Verwandte Themen