2013-11-21 2 views
12

У меня аналогичная проблема, как тот, представленный в вопросе No Entity Framework provider found for the ADO.NET provider with invariant name 'System.Data.SqlClient', ошибка имеет следующее сообщение:поставщик ADO.NET Entity Framework Sql.Data.Client не найден

«Провайдер ADO.NET с инвариантом имя «System.Data.SqlClient» либо не зарегистрировано в файле конфигурации устройства или приложения, либо не может быть загружено. Подробнее см. внутреннее исключение ».

Как следует из ответов на соответствующий вопрос, я переустановил Entity Framework (EF6) через консоль диспетчера пакетов, но ошибка сохраняется. Я также проверил, что EntityFramework.SqlServer.dll ссылается в моем проекте. Вот строка соединения, хранящиеся в App.config:

<add name="DesignModel" ConnectionString="metadata=res://*/DesignModel.csdl|res://*/DesignModel.ssdl|res://*/DesignModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=C071E;initial catalog=CTD2;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />  

У меня есть еще один проект, в котором я использовал EntityFramework создать те же объекты и контекст, и она отлично работает, что делает это все более загадочным.

Ошибка появляется при попытке выполнить эти строки:

DesignModel designContext = new DesignModel(); 
designContext.MoPerfIDs.Load(); 

где DesignModel это имя класса, который наследует DbContext.

Вот полный App.config:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <configSections> 
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
     <section name="ppe.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
    </sectionGroup> 
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> 
     <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
    </configSections> 

    <connectionStrings> 
    <add name="DesignModel" connectionString="metadata=res://*/DesignModel.csdl|res://*/DesignModel.ssdl|res://*/Design Model.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=MONNMC071E;initial catalog=CTD2;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 
    </connectionStrings> 

<entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"> 
     <parameters> 
      <parameter value="System.Data.SqlClient" /> 
     </parameters> 
    </defaultConnectionFactory> 
    <providers> 
     <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
    </providers> 
</entityFramework> 
</configuration> 

Любая помощь будет оценена. Заранее спасибо.

+0

И каковы внутренние исключения? – Pawel

+1

Является ли EntityFramework.SqlServer.dll в корзине? –

+3

У меня такая же проблема. Я не могу просто создать другое решение, чтобы исправить это. Я также не понимаю, как это закрывается как «вне темы». – Bloodhound

ответ

0

Ничего себе ... это довольно специальный ... Anyways. Вам необходимо зарегистрировать провайдера Entity Framework для типа соединения SQL System.Data.SqlClient.

Вы хотите добавить следующую строку в ваш app.config/web.config

<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> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"> 
     <parameters> 
     <parameter value="System.Data.SqlClient" /> 
     </parameters> 
    </defaultConnectionFactory> 
    <providers> 
     <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
    </providers> 
    </entityFramework> 
</configuration> 
+0

это разрешило проблему – RajeshKannan

+0

Нет RajeshKannan это не так. – Bloodhound

2

Вы должны зарегистрировать поставщик Entity Framework для типа соединения System.Data.SqlClient SQL. вы должны иметь в app.config:

<configSections> 
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> 
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
    </configSections> 
    <entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> 
     <parameters> 
     <parameter value="v11.0" /> 
     </parameters> 
    </defaultConnectionFactory> 
    <providers> 
     <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
    </providers> 
    </entityFramework> 
+0

OP не использует 'LocalDb' проверку строки подключения EF. – Aron

+0

Ack ... Я сделал ту же ошибку ... Я тоже оставил в коде CE ... – Aron

+0

Спасибо за ответы. Я попробовал, как было предложено, однако я все еще получаю ту же ошибку. Я отредактировал вопрос и разместил полный файл App.config. Очень запутанно, как в другом проекте, где ошибка не появляется, единственное, что в App.config - это строка соединения для фреймворка сущности. – MigLuev

0

еще не уверены, что причиной проблемы, но в конечном итоге создать новое решение и копировать все от моего проекта. Теперь работает отлично. Действительно странно.

0

Есть 2 варианта, которые вы можете попробовать.

1) Load "System.Data.SqlClient" вручную

Включить последующее заявление в контексте вашего класса

var type = typeof(System.Data.Entity.SqlServer.SqlProviderServices);

2) Не загружайте "System.Data.SqlClient"

Заменой от

<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> 
    <parameters> 
    <parameter value="v11.0" /> 
    </parameters> 
</defaultConnectionFactory> 
<providers> 
    <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
</providers> 

до

<providers> 
    <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
</providers> 
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> 
    <parameters> 
    <parameter value="v11.0" /> 
    </parameters> 
</defaultConnectionFactory> 

Я надеюсь, что ваша проблема решена.

+0

Ни один из этих предложений не устранил проблему. – Bloodhound

0

Попробуйте добавить

вар _ = System.Data.Entity.SqlServer.SqlProviderServices.Instance;

в ctor вашего дизайнаКонтекст.

0

Проблема в моем случае заключалась в том, что для того, чтобы поймать другое исключение, я включил исключения CLR. И я забыл отключить его.

Я отключил его в настройке исключения. и он упустил это исключение и продолжил работать и создал db для меня (в моем случае) автоматически.

0

Просто установите «MySql.Data.Entity» из nuget! Он автоматически установит драйвер mysql ado и драйвер сущности!

0

Я получил эту ошибку, но для меня это было совсем другое.

мне пришлось изменить:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config 

И:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config 

Поиск DbProviderFactories как конфиги выглядел так:

<system.data> 
    <DbProviderFactories> 
     <add name="IBM DB2 for i .NET Provider" invariant="IBM.Data.DB2.iSeries" description=".NET Framework Data Provider for IBM i" type="IBM.Data.DB2.iSeries.iDB2Factory, IBM.Data.DB2.iSeries, Version=12.0.0.0, Culture=neutral, PublicKeyToken=9cdb2ebfb1f93a26" /> 
    </DbProviderFactories> 
    <DbProviderFactories /> 
</system.data> 

Когда я снял задний <DbProviderFactories /> все начали работать еще раз.

я был в состоянии решить эту проблему, глядя только Unable to find the requested .Net Framework Data Provider и найти этот ответ:

https://stackoverflow.com/a/9929534/3850405

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