Сопоставление логического свойства с Oracle с использованием Entity Framework

Сначала мне нужно подключить систему к оракулу, используя модель объекта. У меня есть модель с сущностью "Entity1". "MyBool", как следует из названия, является логическим свойством.

введите здесь описание изображения

Я успешно сгенерировал сценарий sql из модели и запустил его в базе данных оракула.

Тогда у меня есть этот код:

static void Main(string[] args)
{
    Model1Container context = new Model1Container();
    Entity1 entity = context.Entity1.FirstOrDefault();
}

Этот код выдает это исключение:

Указанная схема недействительна. Ошибки: Model1.msl(8,12): ошибка 2019: указанное сопоставление элементов недопустимо. Тип Edm.Boolean[Nullable=False,DefaultValue=] члена MyBool в типе Model1.Entity1 несовместим с OracleEFProvider.number[Nullable=False,DefaultValue=,Precision=1,Scale=0 ]» члена «MyBool» в типе «Model1.Store.Entity1».

Я прочитал много тем, и многие люди сказали добавить:

  <oracle.dataaccess.client>
    <settings>
      <add name="bool" value="edmmapping number(1,0)" />
    </settings>
  </oracle.dataaccess.client>

В файле конфигурации (в моем случае это консольное приложение, затем app.config). Но это ничего не изменило. Действительно, я могу установить любое значение этого параметра, и ошибка будет точно такой же. Похоже, этот параметр не читается.

Затем некоторые люди сказали: добавьте в проект DLL Oracle.DataAccess. Что я и сделал, и результаты были такими же.

Я знаю, что есть много тредов на эту тему, но любой из них мне помог, и я не знаю, что еще делать. Просто хочу отметить, что моя реальная модель приложения уже работает на Sql Server.


person Thiago    schedule 07.10.2013    source источник
comment
возможный дубликат номер Oracle EF EDM Builder (1, 0) -> Int16 /буль   -  person Danny Varod    schedule 26.10.2013
comment
Я изменил тип столбца на целочисленный вместо логического. В классе модели объекта (сначала я использовал код) я создал логическое свойство, а в методах установки и получения я преобразовал целочисленный атрибут в логическое значение (тогда мне не нужно было изменять другие слои приложения). Это не красиво, но это сработало.   -  person Thiago    schedule 13.01.2014


Ответы (2)


Проведя некоторое исследование, я обнаружил, что совершенно нормально иметь собственное сопоставление для сопоставления номера базы данных (1) с типом .net bool. Недостатком, конечно же, является ошибка отображения 2019 года (или ошибка проверки схемы). Если вы хотите избавиться от ошибки сопоставления, которая обычно не вызывает проблем при сборке решения, — отключить проверку модели во время сборки, установите для параметра «Проверка при сборке» значение false.

person Mrinal Das    schedule 16.11.2015

Я использую EF6 и Oracle.ManagedDataAccess.Client в своем проекте. После обновления до EF6 я начал получать ту же ошибку во время выполнения. Добавление следующего блока в Web.Config устранило ошибку.

<oracle.manageddataaccess.client>
    <version number="*">
      <edmMappings>
        <edmNumberMapping>
          <add NETType="int16" MinPrecision="1" MaxPrecision="4" DBType="Number"/>
        </edmNumberMapping>
      </edmMappings>
    </version>
  </oracle.manageddataaccess.client>
person Ratna Aloorkar    schedule 17.02.2017