Компания devart dotConnect для Oracle и библиотека корпоративных настраиваемых отображений поставщика
Я пытаюсь получить простое доказательство концепции, используя пробную версию dotConnect от Devart для Oracle, потому что в настоящее время мы используем платформу .Net framework OracleClient (которая должна быть устаревшей), но у нас также есть требование для подключения без необходимости в клиенте Oracle или даже мгновенном клиенте. По этой причине я пытаюсь доказать своему боссу, что dotConnect-это инструмент для работы, учитывая его прямой режим и возможность работы с Enterprise Library 5 (используется в нашем уровне доступа к данным). Я следуйте примерам, предоставленным Devart, включая добавление пользовательской карты поставщика в приложение.настройка в тестовом приложении. Все это, казалось, работало на моей машине разработки как в IDe, так и в скомпилированном приложении, поэтому я завернул его в простой проект установки и развертывания, построил msi и затем установил его на виртуальной машине vanilla Win 7 x86, на которой не установлен клиент Oracle для тестирования.
Он просто не хочет работать. Тест выполняет простой выбор оператор и отображает результаты в виде списка (если они есть - вы получите сообщение, если нет). На самом деле я не беспокоюсь о самих результатах, а просто о том, как их получить. Проблема в том, что когда я выполняю тест, я получаю всегда бесполезную ошибку EL:
Activation error occured while trying to get instance of type Database, key "Testing26_devart"
Вот оскорбительная строка кода:
Dim db As Database = EnterpriseLibraryContainer.Current.GetInstance(Of Database)(EnvironmentName)
Вот отображение поставщика в приложении.конфигурационный файл:
<add databaseType="Devart.Data.Oracle.EnterpriseLibrary.OracleDatabase, Devart.Data.Oracle.EnterpriseLibrary, Version=3.5.4456.40828, Culture=neutral, PublicKeyToken=null" name="Devart.Data.Oracle" />
Вот строка подключения из приложения.config:
<add name="Testing26_devart" connectionString="User Id=Testing26;Password=Testing26;Server=ORACLE-SERVER;Direct=True;Sid=DEVORA;Port=1523;"
providerName="Devart.Data.Oracle" />
Я знаю, что эта ошибка может быть вызвана используя неправильное имя строки подключения (среди прочего), но я знаю, что это правильно, потому что я получаю его из файла конфигурации в первую очередь. Кроме того, это точно такая же конфигурация, как и конфигурация, используемая в среде разработки. Внутреннее исключение таково:
Microsoft.Practices.Unity.ResolutionFailedException: Resolution of the dependency failed, type = "Microsoft.Practices.EnterpriseLibrary.Data.Database", name = "Testing26_devart".
Exception occurred while: while resolving.
Exception is: InvalidOperationException - The type Database cannot be constructed. You must configure the container to supply this value.
Я подозреваю, что во всем виновато отображение провайдера, потому что если я изменю провайдера в строке подключения на System.Data.OracleClient
, то у него не будет никаких проблем с поиском строки подключения, но вместо этого он будет жаловаться на неподдерживаемую ключевое слово Direct
(от переключателя прямого режима dotConnect), что имеет смысл.
Я не вижу, что я сделал неправильно в отношении отображения поставщика. Я не использовал его раньше, но я использовал инструмент настройки EL для обеспечения его корректности, пользовательская библиотека включена в исполняемый файл (и другие библиотеки EL). Я просмотрел несколько примеров, все из которых предполагают, что у меня есть правильная конфигурация, так что же я упускаю? Это сводит меня с ума.
1 ответ:
Похоже, что DbProviderFactory не настроен. Вероятно, когда вы устанавливаете программное обеспечение Devart, оно устанавливает DbProviderFactory в машину.конфиг. Проверьте машину.настройка на вашей машине разработки для существования DbProviderFactory.
Если вы не хотите модифицировать машину.config вы можете добавить информацию о конфигурации в свое приложение.конфиг. Это будет выглядеть примерно так:
<system.data> <DbProviderFactories> <add name="dotConnect for Oracle" invariant="Devart.Data.Oracle" description="Devart dotConnect for Oracle" type="Devart.Data.Oracle.OracleProviderFactory, Devart.Data.Oracle" /> </DbProviderFactories> </system.data>
Я не знаком с библиотеками Devart, поэтому я не уверен, что версия или Значения PublicKeyToken будет.
Если библиотека предприятия не может найти DbProviderFactory, то база данных не будет зарегистрирована, и при попытке доступа к базе данных вы получите сообщение, что объект не может быть найден в контейнере.