framework - El mapeo del tipo de datos booleano.NET al número de Oracle(1,0) en el marco de la entidad produce un error
entity framework ventajas y desventajas (5)
A continuación se muestra un ejemplo de app.config que contiene una asignación personalizada donde NUMBER (1, 0) se asigna a Bool, NUMBER (3,0) se asigna a Byte, y las precisiones máximas para Int16, Int32, Int64 se cambian a 4 , 9, 18 de los valores predeterminados de 5, 10, 19, respectivamente:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
</connectionStrings>
<oracle.dataaccess.client>
<settings>
<add name="bool" value="edmmapping number(1,0)" />
<add name="byte" value="edmmapping number(3,0)" />
<add name="int16" value="edmmapping number(4,0)" />
<add name="int32" value="edmmapping number(9,0)" />
<add name="int64" value="edmmapping number(18,0)" />
</settings>
</oracle.dataaccess.client>
</configuration>
De la misma manera, puede asignar .net bool al número de Oracle (1,0)
La asignación del tipo de datos booleano .NET al número de Oracle (1,0) en el archivo .edmx produce el siguiente error.
Error 2019: la asignación de miembros especificada no es válida. El tipo ''Edm.Boolean [Nullable = False, DefaultValue =]'' del miembro ''COLUMN123'' en el tipo ''DBModel.TABLE123'' no es compatible con ''OracleEFProvider.number [Nullable = False, DefaultValue =, Precision = 1, Scale = 0 ] ''del miembro'' CHECK_INSTALLATION ''en el tipo'' DBModel.Store.TABLE123 ''.
¿Se puede asignar un tipo de datos booleano al número de Oracle (1,0) usando el marco de entidad?
Agregar una sección oracle.dataaccess.client no fue suficiente para mí. Lo siguiente (tomado de Implementar y configurar ODP.NET para trabajar sin instalación con Entity Framework ) sí funcionó:
<configuration>
<configSections>
<section name="oracle.dataaccess.client" type="System.Data.Common.DbProviderConfigurationHandler, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<section name="oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</configSections>
...
<oracle.dataaccess.client>
<settings>
<add name="bool" value="edmmapping number(1,0)" />
</settings>
</oracle.dataaccess.client>
<oracle.manageddataaccess.client>
<version number="*">
<edmMappings>
<edmMapping dataType="number">
<add name="bool" precision="1"/>
<add name="byte" precision="2" />
<add name="int16" precision="5" />
</edmMapping>
</edmMappings>
</version>
</oracle.manageddataaccess.client>
Esta configuración me funcionó utilizando VS 2012, EF5 con Oracle 11 y oraclManageDataAccess 12.1. NÚMERO 1 no nulo se convirtió a bit.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="entityFramework"
type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
requirePermission="false" />
</configSections>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
</entityFramework>
<connectionStrings>
</connectionStrings>
<oracle.manageddataaccess.client>
<version number="*">
<edmMappings>
<edmMapping dataType="number">
<add name="bool" precision="1" />
<add name="byte" precision="2" />
<add name="int16" precision="5" />
</edmMapping>
</edmMappings>
</version>
</oracle.manageddataaccess.client>
</configuration>
Obtuve los errores cuando copié una solución para usar en un nuevo proyecto, así que cambié del controlador oracle no administrado al controlador oracle administrado, luego el problema desapareció, pero cuando publiqué en el servidor, el servidor no tenía el controlador oracle administrado instalado, por lo que tuve que cambiar de nuevo al controlador oracle no administrado. El problema volvió, por supuesto, así que fui al explorador del servidor y verifiqué que podía conectarme a mis fuentes de Oracle (usando el controlador no administrado), luego abrí el archivo edmx, hice clic derecho y hice clic en validar que aún mostraba los errores en el error lista, luego simplemente hice clic con el botón derecho del mouse y hice clic en el modelo de actualización de la base de datos, verifiqué que las tablas se enumeraban en la pestaña de actualización, luego hice clic en finalizar, tomó un poco de tiempo para que la actualización terminara, pero cuando terminó, los errores desaparecieron.
Creo que este error aparece cuando se intenta utilizar la configuración del controlador no administrado en los archivos web.config y app.config, pero se conecta al controlador administrado en el explorador del servidor (que es la conexión que utiliza el modelo de actualización de edmx desde la base de datos). ), o viceversa.
Recibía este error en VS 2015. El proyecto se compilaría sin errores, pero la lista de errores aún mostraría este error. Se agregó la siguiente sección a mi app.config para resolver el problema. Tenga en cuenta que el elemento edmMapping no es compatible con el esquema XSD que proporciona oracle (por lo que recibirá una advertencia al respecto si su archivo de configuración está abierto), pero es mejor que tener esos errores.
<oracle.manageddataaccess.client>
<version number="*">
<edmMappings>
<edmNumberMapping>
<add NETType="bool" MinPrecision="1" MaxPrecision="1" DBType="Number" />
</edmNumberMapping>
<edmMapping dataType="number">
<add name="bool" precision="1"/>
</edmMapping>
</edmMappings>
</version>
</oracle.manageddataaccess.client>