Поставщик службы Entity Framework не найден для поставщика ADO.NET с инвариантным именем "System.Data.SqlClient".
Мы используем EntityFramework 6 с кодом First. У нас есть консольное приложение, которое не имеет ссылки на EntityFramework, но читает строку подключения из App.config. Он вызывает сборку DatabaseInitializationUtilities, передающую строку соединения в качестве параметра.
DatabaseInitializationUtilities имеет ссылку на EF6 (EntityFramework и EntityFramework.SqlServer). Его App.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<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>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IAuthentication" />
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost/SecurityServices/Authentication.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IAuthentication" contract="SecurityService.IAuthentication" name="BasicHttpBinding_IAuthentication" />
</client>
</system.serviceModel>
<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>
</configuration>
Когда выполнение достигает строки, в которой DatabaseInitializationUtilities пытается запустить script
context.Database.ExecuteSqlCommand(script.ScriptText)
выдается ошибка:
Поставщик службы Entity Framework не найден для поставщика ADO.NET с инвариантным именем "System.Data.SqlClient". Убедитесь, что провайдер зарегистрирован в разделе "entityFramework" файла конфигурации приложения. Подробнее см. http://go.microsoft.com/fwlink/?LinkId=260882.
Я считаю, что это именно то, что у меня есть в моем файле конфигурации, поэтому я не понимаю проблему.
ПРИМЕЧАНИЕ. Resharper отключает node и сообщает
"Элемент" EntityFramework "имеет недопустимый дочерний элемент" поставщики ". Однако раздел был инъецирован NuGet, когда я установил EF6.
Любые идеи?
Ответы
Ответ 1
Вам нужно создать ссылку, поэтому она будет скопирована в папку отладки. Таким образом, он может быть доступен во время выполнения.
Не копируйте файлы, просто создайте эту ссылку:
private volatile Type _dependency;
public MyClass()
{
_dependency = typeof(System.Data.Entity.SqlServer.SqlProviderServices);
}
Ответ 2
У вас есть сборка EntityFramework.SqlServer.dll в вашем пути к программе?
У меня была та же проблема и после копирования dll в путь приложения каждый Thing работал нормально.
Ответ 3
Наконец нашел ответ в этом блоге:
http://robsneuron.blogspot.com/2013/11/entity-framework-upgrade-to-6.html
Ответ 4
У меня тоже была эта проблема. Все работало локально, когда я запускал мое .net-приложение mvc, но когда я его опубликовал, я получил эту ошибку. Проблема заключалась в том, что мне пришлось ссылаться на EntityFrameworl.SqlServer также в моем веб-проекте, хотя у меня был отдельный проект для Data. Странно, что эта ошибка была брошена только тогда, когда приложение было опубликовано. Это серьезная ошибка, вероятно, от Microsoft. Я использовал EF 6.1.1.
Ответ 5
Это связано с тем, что EntityFramework.SqlServer.dll
не копируется в ваш проект. Добавьте эту dll, и она, надеюсь, будет работать. Вы можете найти это в проекте, где вы добавили datamodel.
Ответ 6
Для меня оказалось, что ссылка моего провайдера в файле web.config неверна. Я считаю, что пакет nuget может неправильно включать поставщика.
Я заменил моего провайдера этим, и он работал:
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
Ответ 7
Лучший способ получить такую проблему - включить в свой проект ссылку EntityFramework.SqlServer.dll, нажать F4 (для свойств), изменить свойство Copy на Local = True, чтобы каждый раз при публикации приложения оно будет скопировано в опубликованную папку.
Ответ 8
Я обычно добавляю EntityFramework в веб-проект, а также сборку, которая на самом деле ссылается на нее.
Ответ 9
У меня также была аналогичная проблема
Моя проблема была решена путем выполнения следующих действий:
![введите описание изображения здесь]()
![введите описание изображения здесь]()