Сопоставление .NET Boolean datatype с номером oracle (1,0) в сущности Framework вызывает ошибку
Сопоставление .NET boolean datatype с номером oracle (1,0) в файле .edmx вызывает следующую ошибку.
Ошибка 2019: Указание членства недействительно. Тип 'Edm.Boolean [Nullable = False, DefaultValue =]' члена 'COLUMN123' в тип "DBModel.TABLE123" несовместим с 'OracleEFProvider.number [Nullable = False, DefaultValue =, Точность = 1, шкала = 0]' члена "CHECK_INSTALLATION" в типе "DBModel.Store.TABLE123".
Можно ли сопоставить Boolean-тип данных с номером oracle (1,0) с использованием структуры сущностей?
Ответы
Ответ 1
Добавление раздела oracle.dataaccess.client для меня было недостаточным. Следующее (взятое из Развертывание и настройка ODP.NET для работы без установки с Entity Framework) работало:
<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>
Ответ 2
Ниже приведен пример app.config, который содержит настраиваемое отображение, где
NUMBER (1, 0) отображается в Bool, NUMBER (3,0) сопоставляется с байтом, а
максимальные требования для Int16, Int32, Int64 изменены на 4, 9, 18 из
значения по умолчанию 5, 10, 19 соответственно:
<?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>
Таким же образом вы можете сопоставить .net bool с Oracle Number (1,0)
Ответ 3
Эта конфигурация работала для меня с использованием VS 2012, EF5 с Oracle 11 и oraclManageDataAccess 12.1.
NUMBER 1 не был преобразован в бит.
<?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>
Ответ 4
Получалась эта ошибка в VS 2015. Проект будет компилироваться без ошибок, но список ошибок все равно покажет эту ошибку.
Добавлен следующий раздел в мой app.config, чтобы решить проблему.
Обратите внимание, что элемент edmMapping несовместим с схемой XSD, которую предоставляет oracle (поэтому вы получаете предупреждение об этом, если ваш файл конфигурации открыт), но он все же лучше, чем наличие этих ошибок.
<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>
Ответ 5
У меня возникли ошибки, когда я скопировал решение для использования для нового проекта, поэтому я изменил его с неуправляемого драйвера oracle на управляемый драйвер oracle, а затем проблема исчезла, но когда я опубликовал на сервере, сервер сделал не установлен установленный драйвер oracle, поэтому мне пришлось вернуться к неуправляемому драйверу oracle. Проблема, конечно, вернулась, поэтому я отправился на серверный проводник и подтвердил, что могу подключиться к своим источникам oracle (используя неуправляемый драйвер), затем я открыл файл edmx и щелкнул правой кнопкой мыши и нажал кнопку проверки, которая все еще показывала ошибки в ошибке список, затем я просто щелкнул правой кнопкой мыши и нажал кнопку модели обновления из базы данных, подтвердил, что таблицы были указаны на вкладке обновления, а затем нажмите кнопку "Готово", для завершения обновления потребовалось немного времени, но когда это было сделано, ошибки исчезли.
Я считаю, что эта ошибка возникает при попытке использовать неуправляемые параметры драйвера в файлах web.config и app.config, но подключение к управляемому драйверу в проводнике сервера (это соединение, которое модель обновления edmx из базы данных "действие использует) или наоборот.