Подтвердить что ты не робот

Oracle ODP.Net с Entity Framework 6 - Объект, совместимый с базой данных, не может быть найден

Я пытаюсь создать веб-приложение MVC 5 с Entity Framework 6, которое работает с Oracle Database, я пытаюсь использовать ODAC 12c Release 3, который включает поддержку Entity Framework 6 Code First и First First Code; NuGet,.NET Framework 4.5.2; и ODP.NET, управляемый драйвер XML DB. Согласно

http://www.oracle.com/technetwork/topics/dotnet/whatsnew/index.html

У меня есть обновление VS Community Community Edition 4.

Я пытаюсь добавить модель, используя модель данных Entity Data ADO.Net, с первым кодом.

У меня есть следующие настройки в моем Web.config

    <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    <section name="Oracle.ManagedDataAccess.Client"
             type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />


  </configSections>

  <entityFramework>
    <contexts>
      <context type="Tamayz.Context.Default, Tamayz.Context">
        <databaseInitializer type="MyProject.Context.Config.ContextInitializer, MyProject.Context" />
      </context>
    </contexts>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <providers>
      <provider invariantName="Oracle.ManagedDataAccess.Client" 
                type="Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices, Oracle.ManagedDataAccess.EntityFramework, Version=6.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
    </providers>
  </entityFramework>

Я также добавил Oracle.ManagedDataAccess версии 4.121.2.0 в качестве ссылки и перестроил решение.

Я попробовал теперь добавить модель, используя ADO.Net Entity Data Model, с кодом First. но я получаю следующее сообщение на последнем экране мастера:

В вашем проекте упоминается последняя версия структуры сущностей; однако провайдер базы данных Entity Framework, совместимый с этой версией, не найден для вашего соединения...

Как я могу правильно настроить приложение для использования ODAC с кодом EF6?

4b9b3361

Ответ 1

Наконец, я смог использовать ODP с EF6.

Я сделал следующее, чтобы заставить его работать: -

Первая установка ODAC 12c Release 3, которая включает поддержку Entity Framework 6 First Code и First Migrations; NuGet,.NET Framework 4.5.2; и ODP.NET, управляемый драйвер XML DB. Согласно

http://www.oracle.com/technetwork/topics/dotnet/whatsnew/index.html

Добавление двух ссылок в мои ссылки на проект, и они:

Oracle.ManagedDataAccess.dll

Oracle.ManagedDataAccess.EntityFramework.dll

Установка EF6.1.1 с помощью NuGet с помощью следующей команды в консоли диспетчера пакетов (вы можете ввести ее с помощью Tools- > NuGet Package Manager → Package Manager Console):

Install-Package EntityFramework -Version 6.1.1

И измените свой web.config или web.config на использование Oracle.ManagedDataAccess, добавив Provider и допустимую строку соединения, например:

<configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    <section name="Oracle.ManagedDataAccess.Client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
  </configSections>
  <entityFramework>
    <contexts>
      <context type="App.Context.Default, App.Context">
        <databaseInitializer type="MyProject.Context.Config.ContextInitializer, MyProject.Context" />
      </context>
    </contexts>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <providers>
      <provider invariantName="Oracle.ManagedDataAccess.Client" type="Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices, Oracle.ManagedDataAccess.EntityFramework, Version=6.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
  <connectionStrings>
    <add name="Default" providerName="Oracle.ManagedDataAccess.Client" connectionString="DATA SOURCE=XE;USER ID=User" />
  </connectionStrings>

Восстановите свое приложение как x86 и начните использовать EF6, вы можете проверить, работает ли он, добавив модель, используя ADO.Net Entity Model, используя Code First

Ответ 2

Просто для дополнения, я пробовал все, но в моем случае это было решено, установив " defaultConnectionFactory", например:

<entityFramework>
<defaultConnectionFactory type="Oracle.ManagedDataAccess.EntityFramework.OracleConnectionFactory, Oracle.ManagedDataAccess.EntityFramework">
</defaultConnectionFactory>
<providers>
  <provider invariantName="Oracle.ManagedDataAccess.Client" type="Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices, Oracle.ManagedDataAccess.EntityFramework, Version=6.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</providers>
</entityFramework>

нашел решение здесь: https://community.oracle.com/message/13114643#13114643

Я надеюсь, что это поможет кому-то...

Ответ 3

У меня была эта проблема на visual studio 2015. В моем случае это было связано с тем, что Entity Framework 6.1.3 не поддерживается. После понижения его до 6.1.2 он работает.

Ответ 4

Позднее присоединение к этой теме. Несколько человек обновлены до VS2017 (остальные в нашей команде все еще используют VS2015 и планируют перейти на VS2017). Один из наших проектов касался Oracle.ManagedDataAccess.dll ver4.121.2.0 и Oracle.ManagedDataAccess.EntityFramework.dll ver6.121.2.0 через локальные ссылки dll.

Все dev-workstations имели драйверы oracle-odac ver4.122.1.0 и ver6.122.1.0, установленные в системном масштабе (GAC и т.д.).

Этот тип настройки работал отлично для VS2015, но по какой-то странной причине он не работал для VS2017. Виной для VS2017 было то, что Oracle.ManagedDataAccess.dll и Oracle.ManagedDataAccess.EntityFramework.dll, где не копируются в выходную папку нашего проекта asp.net начального уровня, пока и до тех пор, пока локальные ссылки dll, также обновленные до ver4.121.2.0 и ver6.121.2.0.

У нас не было времени посмотреть на все это, но вышеупомянутое решение сработало для VS2017.