Indicar tipo de dato que quieres en el mapeo de Oracle con Entity Framework

Debido a que Oracle no es el origen de datos nativo de las tecnologías Microsoft (para ello utilizar Sql Server) el trato de los tipos de datos puede llegar a ser un autentico quebradero de cabeza a la hora de mapearlos con Entity Framework.

Pero existe la posibilidad de configurar el tipo de dato origen que quieres en el destino, para ellos tenemos que hacer caso a esta documentación:
Entity Framework 6 Mapping and Customization

Sabemos que Oracle por defecto se mapea de esta forma:

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

El siguiente código no te aparecerá en el appconfig de la aplicación que tiene el edmx por que es el mapeo por defecto, si lo quieres modificar lo tendrás que incluir tu en el nodo oracle.manageddataaccess.client

En nuestro proyecto solo hizo falta retocar los tipos de dato numéricos ya que había problema con valores negativos y los tipo byte al igual que la precisión de los int16:

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

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *