2013-12-03 3 views
1

В настоящее время я занимаюсь разработкой приложений MVC4, который имеет локальную базу данных SQL, но и необходимо для подключения к базе данных Oracle для некоторых вещей ...Entity Framework DataContext в Oracle Database

Теперь у меня есть опыт работы с MVC и EF, но мне не хватает знаний Oracle.

После долгих поисков и пробных проб, ошибок и помощи мне удалось подключиться к базе данных оракула, используя «обычный» способ открытия нового OracleConnection (connString) и выполнить SQL с помощью OracleCOmmand. Поэтому я знаю, что моя строка подключения правильная и база данных доступна.

Я надеялся, что я мог бы просто создать класс DataContext, и использовать свой рабочий ConnectionString и EF будет работать из коробки, когда я буду делать

using (var ctx = new OracleContext()) 
{ 
    var test = ctx.People.ToList(); 
} 

Однако, теперь я получаю сообщение об ошибке о нуле вернулся из «get_ProviderFactory». Необходимы ли дополнительные шаги для того, чтобы EF мог работать?

Если вам нужна дополнительная информация, я был бы рад предоставить это!

Заранее благодарен!

+0

Вам необходим [поставщик данных Oracle для .NET] (http://www.oracle.com/technetwork/topics/dotnet/index-085163.html), который поддерживает EF. – GriffeyDog

+0

@GriffeyDog Я уже установил их. Я установил 32-битные версии, установил мой проект на 32 бита. У меня есть множество DLL Oracle (среди которых Oracle.DataAccess Dll, которые я вижу много на сообщениях SO) в GAC. Я также попытался добавить узел DbProviderFactories к моему web.config на всякий случай, если установка не изменила мой machine.config должным образом. Он вернулся с сообщением о том, что инвариантное имя (Oracle.DataAccess.Client) уже было принято, поэтому я считаю, что я действительно правильно установил все. Но я все время получаю ошибку.Есть ли что-то еще, что я могу потерять? –

ответ

2

Да, я понял, это один из ... Так вот мой способ tackeling это на будущее ...

Прежде, чтобы проверить, что пошло не так с dataproviders, я использовал этот код где-то в начало моего приложения:

DataTable dataTable = DbProviderFactory.GetFactoryClasses(); 

Это дало мне DataTable для проверки. В Rows-property он показал 5 разных Dataproviders (OleDB, SQL и т. Д.), Мой номер 5 был установленным Dataprovider Oracle. Это показало мне, что я правильно установил провайдера (просто потому, что он был там), однако это был Oracle.ManagedDataAccess.Client один, а НЕ Oracle.DataAccess.Client один ... Все сообщения SO и интернет никогда не говорили мне об этом управляемом ...

Так что это сделало его простым исправлением, добавив, что Oracle.ManagedDataAccess dll, установите copylocal в false и ссылку на него в приложение (в GAC будет возможно, я думаю) и изменения ConnectionString ProviderName-атрибут в web.config для

providerName="Oracle.ManagedDataAccess.Client" 

Если вы не имеете OracleProvider в DataTable, но вы уверены, что вы установили его, возможно, это не добавляются к вашей машине. конфигурации. Вы можете добавить его в корень web.config:

<system.data> 
    <DbProviderFactories> 
     <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> 

(Угадайте, что также может быть использован для развертывания его на машине без DLL провайдера, до тех пор, как вы развернуть Dll вместе с приложением)

Надеюсь, это поможет будущему посетителю!

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