Сопоставление .NET Boolean datatype с номером oracle (1,0) в сущности Framework вызывает ошибку - программирование
Подтвердить что ты не робот

Сопоставление .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) с использованием структуры сущностей?

4b9b3361

Ответ 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 из базы данных "действие использует) или наоборот.