2017-11-27 2 views
1

Ich habe eine Legacy-Anwendung, die bis jetzt mit dem veralteten System.Data.OracleClient-Treiber von Microsoft recht gut funktioniert hat. C# boolesche Werte werden im Allgemeinen in seiner Oracle-Datenbank als Zahl (5,0) dargestellt. Seit Jahren hat das ziemlich gelassen funktioniert.Umgang mit Booleans mit Oracle Managed ODP.Net

Wir versuchen nun, zu Oracle Managed ODP.Net zu wechseln, und Booleans erweisen sich als besonders problematisch. Nach dem Ersetzen des Microsoft-Treibers durch das Oracle ODP.Net-Nugget-Paket finde ich, dass Schreiboperationen mit SQL wie "insert .. where mybooleancolumn = true" (oder parametrierte Entsprechungen) eine 'undefined data- type'-Ausnahme auslösen und boolesche Werte auslesen Die Datenbank ("Select mybooleancolumn from ....") gibt alle Arten von Fehlern, wenn die Werte C# booleans zugewiesen werden.

Wie überwinden andere dieses Problem? Gibt es noch ein zusätzliches Mapping, das getan werden muss?

Antwort

1

In der Oracle-Datenbank, zu der ich mich verbinde (unter Verwendung von Oracles Managed ODP.NET), wird der Boolesche Wert durch eine NUMBER (1, 0) dargestellt.

Hier ist die korrekte Mapping-Code in meine web.config, dass diese Zuordnung richtig arbeiten können:

<oracle.manageddataaccess.client> 
    <version number="*"> 
     <edmMappings> 
     <edmNumberMapping> 
      <add NETType="bool" MinPrecision="1" MaxPrecision="1" DBType="Number" /> 
      <add NETType="byte" MinPrecision="2" MaxPrecision="2" DBType="Number" /> 
      <add NETType="int16" MinPrecision="3" MaxPrecision="4" DBType="Number" /> 
      <add NETType="int32" MinPrecision="5" MaxPrecision="9" DBType="Number" /> 
      <add NETType="int64" MinPrecision="10" MaxPrecision="19" DBType="Number" /> 
     </edmNumberMapping> 
     </edmMappings> 

     <settings> 
     <setting name="TNS_ADMIN" value="PATH TO TNS_ADMIN" /> 
     </settings> 
    </version> 
    </oracle.manageddataaccess.client> 

Das wichtige Bit ist:

<add NETType="bool" MinPrecision="1" MaxPrecision="1" DBType="Number" /> 

Wenn Sie eine solche Zuordnung definieren es sollte Arbeit.

BEARBEITEN: Vergessen Sie nicht, Ihr edmx-Modell zu aktualisieren (aktualisieren Sie es einfach ohne Änderungen) und die Anwendung neu zu erstellen, um sicherzustellen, dass es mit den neuen Zuordnungen aktualisiert wird.

+0

Leider hat das keinen Unterschied gemacht. Ich verwende Managed ODP.Net 12.2.1100 –

+0

@NeilHaughton haben Sie die Zuordnung mit dem gleichen Wert (5, 0) wie in Ihrer Datenbank verwendet und nicht meinen Wert? – Gilles

+0

@NeilHaughton Haben Sie versucht, die EDMX-Datei neu zu generieren? Wenn nicht, verwendet es wahrscheinlich noch die alten Werte, die es beim ersten Mal erzeugt hat. – Gilles

Verwandte Themen