2016-05-09 1 views
1

У меня есть существующая база данных Oracle 11g.Entity Framework с сопоставлением управляемых драйверов Oracle NUMBER (10) до конца не работает

создать новое решение и новый проект (.net 4.5), к которому я добавляю следующие NuGet пакеты:

  • пакет ID = "EntityFramework" версия = "6.1.3"
  • пакет ID = "Oracle.ManagedDataAccess" версия = "12.1.24160419"
  • пакет ID = "Oracle.ManagedDataAccess.EntityFramework" версия = "12.1.2400"

Мой web.config указывает раздел для edmMappings ,

<oracle.manageddataaccess.client> 
    <version number="*"> 
     <dataSources> 
     <dataSource alias="SampleDataSource" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL))) " /> 
     </dataSources> 

     <edmMappings> 
     <edmMapping dataType="number"> 
      <add name="int64" precision="10" /> 
     </edmMapping> 
     </edmMappings> 
    </version> 
</oracle.manageddataaccess.client> 

Я затем добавить новый ADO.NET Entity Data Model, используя EF Designer от Databse (модель первая).

У меня есть таблица PROCESS с столбцом LINK_ID, которая определена как NUMBER (10) в Oracle.

Сгенерированные .edmx-файлы и entites (сгенерированные через tt-файл) используют обычный int (Int32), а не длинный (Int64), как указано в моем сопоставлении.

Я хотел бы, чтобы сгенерированная модель использовала длинный.

я могу пойти и изменить это вручную, но я получаю следующее сообщение об ошибке во время выполнения:

Схема Указана недопустимая. Ошибки: \ r \ nTestMappings2.msl (18,12): ошибка 2019: Указание членства недействительно. Тип 'Edm.Int64 [Nullable = True, DefaultValue =]' элемента 'LINK_ID' в типе 'Model.PROCESS' несовместим с 'OracleEFProvider.number [Nullable = True, DefaultValue =, Precision = 10, Scale = 0] ' пользователя' LINK_ID 'в типе' Model.Store.PROCESS '.

Как я могу заставить сгенерированную модель использовать правильный тип и почему изменение типа дает мне ошибку отображения времени выполнения?

+0

я не включил мой полный файл .config, поскольку это подключение к самой Oracle, кажется, работает, если не включать в себя номер столбца (10) но я могу опубликовать его, если кто-то заинтересован. – Lastwall

ответ

2

От docs.oracle.com похоже, что синтаксис edmMappings изменился, чтобы указать точность Min и Max вместо указания точек отсечки.

<add NETType="int64" MinPrecision="10" MaxPrecision="19" DBType="Number" /> 

старый синтаксис будет:

<add name="int32" precision="9" /> 
<add name="int64" precision="18" /> 
+0

Спасибо! Через Google я наткнулся на более старую версию документов, и все примеры, которые я нашел в другом месте (блоги, форумы, SO), ссылались на старый синтаксис. – Lastwall

Смежные вопросы