2016-04-26 8 views
0

Мы используем DevArt dotConnect для подключения к серверу Oracle. Наши предыдущие машины-разработчики использовали dotConnect 8.4.254.4, что и было проверено в Subversion. Я создал новую машину для разработчиков и установил самую новую версию, которая составляет 8.5.616.0. Я обновил каждую ссылку 8.4, которую я мог найти, даже выполнив «Найти файлы» во всем, что было проверено. Однако что-то об этой версии нарушает наш код. В принципе, правильно, когда я пытаюсь создать контекст базы данных:Ошибка выполнения при создании контекста базы данных с использованием dotConnect и Entity Framework 6

using (var _context = new DbContext())

я получаю это исключение:

'Instance' член Entity Framework типа поставщика «Devart.Data.Oracle .Entity.OracleEntityProviderServices, Devart.Data.Oracle.Entity, Version = 8.5.616.0, Culture = neutral, PublicKeyToken = 09af7300eec23701 'не возвратил объект, который наследует от' System.Data.Entity.Core.Common.DbProviderServices ». Поставщики Entity Framework должны наследовать этот класс, а член «экземпляр» должен вернуть экземпляр singleton поставщика. Возможно, это связано с тем, что провайдер не поддерживает Entity Framework 6 или новее; см. http://go.microsoft.com/fwlink/?LinkId=260882 для более информация.

Я потратил немало времени на поиск переполнения стека для подобных ошибок, и есть много (во многих системах баз данных). Существуют различные решения, такие как обновление различных файлов .config и ссылок на сборку, но я почти все это пробовал. Были также некоторые предложения о переносе DLL из GAC и обращении к нему непосредственно в Program Files, которые я также пробовал. Я сейчас в недоумении. Как я могу выяснить причину этой проблемы? Я рад добавить больше кода или информации, которые были бы полезны, просто спросите.

Update:

Я заметил в обозревателе объектов, если я иду к фактическому Devart.Data.Oracle.Entity.OracleEntityProviderServices класса, базовый тип отсутствует:

enter image description here

Я интересно если это связано с проблемой.

ответ

1

Пожалуйста, проверьте свой * .config. Номер ревизии поставщика в разделе entityFramework должно быть 6 (8.5.616.6), но оно должно быть равно 0 (8.5.616.0) в DbProviderFactories (http://blog.devart.com/entity-framework-6-support-for-oracle-mysql-postgresql-sqlite-and-salesforce.html#ProviderRegistration):

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <configSections> 
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
    </configSections> 
    <entityFramework> 
    <providers> 
     <provider invariantName="Devart.Data.Oracle" type="Devart.Data.Oracle.Entity.OracleEntityProviderServices, Devart.Data.Oracle.Entity, Version=8.5.616.6, Culture=neutral, PublicKeyToken=09af7300eec23701" /> 
    </providers> 
    </entityFramework> 
    <system.data> 
    <DbProviderFactories> 
     <remove invariant="Devart.Data.Oracle" /> 
     <add name="dotConnect for Oracle" invariant="Devart.Data.Oracle" description="Devart dotConnect for Oracle" type="Devart.Data.Oracle.OracleProviderFactory, Devart.Data.Oracle, Version=8.5.616.0, Culture=neutral, PublicKeyToken=09af7300eec23701" /> 
    </DbProviderFactories> 
    </system.data> 
</configuration> 

также удалить ссылки на Devart * сборки. и readd их:

C: \ Program Files (x86) \ Devart \ dotConnect \ Oracle \ Devart.Data.dll

C: \ Program Files (x86) \ Devart \ dotConnect \ Oracle \ Devart.Data .Oracle.dll

C: \ Program Files (x86) \ Devart \ dotConnect \ O racle \ Entity \ EF6 \ Devart.Data.Oracle.Entity.dll (его номер версии 6)

Это работает?

Если вы обновляетесь до версии v.0.0, имейте в виду изменения имен: http://forums.devart.com/viewtopic.php?f=1&t=33571> Изменение имени сборки структуры объекта.

+0

Это исправлено, спасибо! Исполнение .NET - это всегда хлопот. –