2015-11-03 2 views
3

Я использую EF6 ModelFirst и Oracle ODP Управляемый 12с драйвер для разработки приложений .NET (один раствор, содержащий исключительно один проект).NET ODP Управляемый Driver отображение пользователя не работает

Я столкнулся с проблемой отображения между Oracle и .СЕТЬ.

Я пытаюсь указать пользовательское сопоставление в web.config так:

<oracle.manageddataaccess.client> 
<version number="*"> 
    <edmMappings> 
    <edmMapping dataType="number"> 
     <add name="bool" precision="1" /> 
     <add name="byte" precision="3" /> 
     <add name="int16" precision="4" /> 
     <add name="int32" precision="9" /> 
     <add name="int64" precision="18" /> 
    </edmMapping> 
    </edmMappings> 
    <dataSources> 
    ... 
    </dataSources> 
</version> 
</oracle.manageddataaccess.client> 

После генерации EDMX-число (5) колонки по-прежнему отображаются в «короткий» тип .NET (Int16)

Очевидно, что .NET Тип не подходит для почтового кода, как 59000

Если я изменить отображение столбцов из Int16 в Int32 Тип в EDMX-я получаю ошибку 2019 указав, что у меня плохо картографирование

Временное решение: Когда я изменяю xml-версию edmx, если я удаляю точность столбца, он работает с Int32, но после обновления модели из базы данных изменения будут перезаписаны.

+0

http://stackoverflow.com/questions/13721025/deploying-and-configuring-odp-net-to-work-without-installation -with-entity-frame – Chobits

+0

Просто обратите внимание, что ссылка на stackoverflow.com/questions/13721025/ была написана до изменений в EF 6 и не будет работать так же, как в EF 6. – Gilles

ответ

3

Синтаксис edmMappings изменился с EF 6.

Теперь вы должны использовать следующий синтаксис:

<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="4" DBType="Number" /> 
      <add NETType="int32" MinPrecision="5" MaxPrecision="9" DBType="Number" /> 
      <add NETType="int64" MinPrecision="10" MaxPrecision="18" DBType="Number" /> 
     </edmNumberMapping> 
     </edmMappings>  
    </version> 
    </oracle.manageddataaccess.client> 

Теперь вам нужно указать DBTYPE на каждой строке, а не в качестве атрибута к отображению раздел.

Вы также используете NETType, а не имя.

И, наконец, вы должны определить минимальную и максимальную точность.

Документация ссылка: Oracle Number Default Data Type Mapping and Customization В разделе Entity Framework 6 Отображение и настройка

+2

Только то, что мне нужно, спасибо! – ogrim