Проблемы при переключении проекта.NET с неуправляемых сборок на ODP.NET
Я пытаюсь переключить свой проект.NET на оракул управления, чтобы упростить развертывание. Однако я получаю следующую ошибку в моей тестовой среде Win Server 2013:
Невозможно определить имя поставщика для подключения типа "Oracle.ManagedDataAccess.Client.OracleConnection".
Шаги, которые я предпринял до сих пор:
- Удалены все библиотеки Oracle.DataAccess и ссылки из решения.
- Добавлен управляемый драйвер поставщика данных Oracle для.NET (ODP.NET) в диспетчере пакетов NuGet
- Переключил все
Imports Oracle.DataAccess
заявления кImports Oracle.ManagedDataAccess
Я не получаю никаких ошибок сборки, и проект работает нормально локально. Однако при развертывании в среде тестирования я получаю эту ошибку. Среда тестирования - Windows Server 2012, на которой установлена устаревшая клиентская программа Oracle 11.2.0.
Это мой код создания соединения:
Public Sub New()
MyBase.New(
New OracleConnection(
ConfigurationManager.ConnectionStrings("Entities").ConnectionString),
True)
End Sub
Вот 3 различных стиля конфигурации соединения, которые я попробовал (оба работают локально, но дают ту же проблему в тестовой среде)
(отформатирован для наглядности)
<add
name="Entities"
connectionString="
Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=###.###.###.###)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=______)));
User Id=_____;
Password=_____;"
providerName="Oracle.ManagedDataAccess.Client" />
<add
name="Entities"
connectionString="
Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=###.###.###.###)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=______)));
User Id=_____;
Password=_____;"
providerName="Oracle.DataAccess.Client" />
<add
name="Entities"
connectionString="
Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=###.###.###.###)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=______)));
User Id=_____;
Password=_____;"
/>
Любая помощь будет принята с благодарностью!
2 ответа
Метод ручной загрузки
Спасибо @Christian Shay за указание на то, что версия Managed ODAC для NuGet не является автором Oracle
Чтобы использовать управляемый доступ к данным Oracle с Entity Framework, в Visual Studio 2012 (.NET 4.5):
Раскройте Entity Framework 5.0.0.0
Install-Package EntityFramework -Version 5.0.0
Загрузите последние компоненты доступа к данным Oracle (ODAC)
Ручная ссылка
Oracle.ManagedDataAccess.dll
Добавьте этот раздел в файл конфигурации
<system.data>
<DbProviderFactories>
<remove invariant="Oracle.ManagedDataAccess.Client" />
<add name="ODP.NET, Managed Driver"
invariant="Oracle.ManagedDataAccess.Client"
description="Oracle Data Provider for .NET, Managed Driver"
type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</DbProviderFactories>
</system.data>
А затем продолжайте как обычно. В настоящее время создается впечатление, что Entity Framework 6 еще не поддерживает Oracle.ManagedDataAccess, поэтому необходимо запустить версию 5.
Также имейте в виду, что если вы используете Visual Studio 2010 или более раннюю версию, ориентируясь на.NET 4, NuGet отключит EF5, но использует сборки 4.x. Я не проверял это на VS2010 с.NET 4.
Неофициальный метод NuGet
Чтобы использовать управляемый доступ к данным Oracle с Entity Framework, в Visual Studio 2012 (.NET 4.5):
Раскройте Entity Framework 5.0.0.0
Install-Package EntityFramework -Version 5.0.0
Разверните управляемый драйвер поставщика данных Oracle для.NET (ODP.NET)
Install-Package odp.net.managed
Добавьте этот раздел в файл конфигурации
<system.data>
<DbProviderFactories>
<remove invariant="Oracle.ManagedDataAccess.Client" />
<add name="ODP.NET, Managed Driver"
invariant="Oracle.ManagedDataAccess.Client"
description="Oracle Data Provider for .NET, Managed Driver"
type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</DbProviderFactories>
</system.data>
А затем продолжайте как обычно. В настоящее время создается впечатление, что Entity Framework 6 еще не поддерживает Oracle.ManagedDataAccess, поэтому необходимо запустить версию 5.
Также имейте в виду, что если вы используете Visual Studio 2010 или более раннюю версию, ориентируясь на.NET 4, NuGet отключит EF5, но использует сборки 4.x. Я не проверял это на VS2010 с.NET 4.