Поставщик службы Entity Framework не найден для поставщика ADO.NET с инвариантным именем "System.Data.SqlClient"
После загрузки EF6 с помощью nuget и попробуйте запустить мой проект, он возвращает следующую ошибку:
Поставщик службы Entity Framework не найден для поставщика ADO.NET с инвариантным именем "System.Data.SqlClient". Убедитесь, что провайдер зарегистрирован в разделе "entityFramework" файла конфигурации приложения. Подробнее см. http://go.microsoft.com/fwlink/?LinkId=260882.
![enter image description here]()
Ответы
Ответ 1
Я только что попал в ту же проблему, и похоже, что EntityFramework, хотя установленная из NuGet Package Manager, была неправильно установлена в проекте.
Мне удалось исправить это, выполнив следующую команду Консоль диспетчера пакетов:
PM> Install-Package EntityFramework
Ответ 2
Вы добавили EF в проект библиотеки классов, вам также нужно добавить его в проект, который ссылается на него (ваше консольное приложение, веб-сайт или что-то еще).
Ответ 3
Вам не нужно устанавливать Entity Framework в ваше консольное приложение, вам просто нужно добавить ссылку на сборку EntityFramework.SqlServer.dll. Вы можете скопировать эту сборку из проекта библиотеки классов, который использует Entity Framework в папку LIB и добавить ссылку на нее.
Вкратце:
- Приложение библиотеки классов:
- Установить платформу Entity Framework
- Введите код уровня данных
- Файл app.config имеет всю конфигурацию, связанную с Entity Framework, за исключением строки подключения.
- Создание консоли, веб-или настольного приложения:
- Добавить ссылку на первый проект.
- Добавить ссылку на EntityFramework.SqlServer.dll.
- app.config/web.config имеет строку подключения (помните, что имя записи конфигурации должно быть таким же, как имя класса DbContext.
Надеюсь, это поможет.
Ответ 4
Вы также можете увидеть это сообщение, если вы забыли включить "EntityFramework.SqlServer.dll".
Кажется, это новый файл в EF6. Первоначально я не включил его в мой модуль слияния и столкнулся с проблемой, указанной здесь.
Ответ 5
Когда вы устанавливаете Entity Framework 6 через Nuget
. EntityFramework.SqlServer когда-нибудь пропустит другой исполняемый файл. Просто добавьте пакет Nuget
к этому проекту.
Иногда выше не работает для тестового проекта
Чтобы решить эту проблему в тестовом проекте, просто поместите этот метод внутри тестового проекта:
public void FixEfProviderServicesProblem()
{
var instance = System.Data.Entity.SqlServer.SqlProviderServices.Instance;
}
Этот метод никогда не вызывался, но, как мои наблюдения, компилятор удалит все "ненужные" сборки и не использует теги EntityFramework.SqlServer
, которые не пройдены.
Ответ 6
Вместо добавления EntityFramework.SqlServer для размещения проекта вы можете обеспечить статическую ссылку на него из вашего проекта Model/entity, такого как
static MyContext()
{
var type = typeof(System.Data.Entity.SqlServer.SqlProviderServices);
if(type == null)
throw new Exception("Do not remove, ensures static reference to System.Data.Entity.SqlServer");
}
Это приведет к тому, что процесс сборки включает сборку с проектом-хозяином.
Дополнительная информация о моем блоге
http://andersmalmgren.com/2014/08/20/implicit-dependencies-and-copy-local-fails-to-copy/
Ответ 7
Добавьте эту функцию
private void FixEfProviderServicesProblem()
в класс контекста базы данных в классе библиотеки, а отсутствующая DLL EntityFramework.SqlServer.dll будет скопирована в нужные места.
namespace a.b.c
{
using System.Data.Entity;
public partial class WorkflowDBContext : DbContext
{
public WorkflowDBContext()
: base("name=WorkflowDBConnStr")
{
}
public virtual DbSet<WorkflowDefinition> WorkflowDefinitions { get; set; }
public virtual DbSet<WorkflowInstance> WorkflowInstances { get; set; }
public virtual DbSet<EngineAlert> EngineAlerts { get; set; }
public virtual DbSet<AsyncWaitItem> AsyncWaitItems { get; set; }
public virtual DbSet<TaskItem> TaskItems { get; set; }
public virtual DbSet<TaskItemLink> TaskItemLinks { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
}
private void FixEfProviderServicesProblem()
{
// The Entity Framework provider type 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer'
// for the 'System.Data.SqlClient' ADO.NET provider could not be loaded.
// Make sure the provider assembly is available to the running application.
// See http://go.microsoft.com/fwlink/?LinkId=260882 for more information.
var instance = System.Data.Entity.SqlServer.SqlProviderServices.Instance;
}
}
}
.
Ответ 8
Никто из них не работал у меня. Я нашел решение в другом вопросе о стеке. Я добавлю его здесь для удобства:
Вам нужно сделать ссылку, поэтому она будет скопирована в den application дорожка. Потому что позже это будет указано во время выполнения. Таким образом, вы не необходимо скопировать любые файлы.
private volatile Type _dependency;
public MyClass()
{
_dependency = typeof(System.Data.Entity.SqlServer.SqlProviderServices);
}
Ответ 9
Я получил ту же ошибку при использовании Entity Framework 6 с SQL Server Compact 4.0. Была полезной статья о MSDN для Поставщиков инфраструктуры Entity для EF6. Выполнение соответствующих команд провайдера, поскольку пакеты nuget в консоли диспетчера пакетов могут решить проблему, а также пакеты NuGet автоматически добавят регистрацию в файл конфигурации. Я решил PM> Install-Package EntityFramework.SqlServerCompact
решить проблему.
Ответ 10
Когда ошибка возникает в проектах тестов, самым красивым решением является украшение тестового класса:
[DeploymentItem("EntityFramework.SqlServer.dll")]
Ответ 11
В этой проблеме столкнулся сегодня при работе с набором веб-сервисов, каждый в разных проектах, и отдельный проект, содержащий интеграционные тесты для некоторых из этих сервисов.
Я использовал эту настройку в течение некоторого времени с EF5, без необходимости включать ссылки на EF из тестового проекта интеграции.
Теперь, после перехода на EF6, кажется, мне нужно включить ссылку на EF6 в проект интеграции, даже если он не используется там (в значительной степени, как указано выше user3004275).
Показания к той же проблеме:
- Вызовы непосредственно к EF (подключение к БД, получение данных и т.д.) работают нормально, если они инициируются из проекта, имеющего ссылки на EF6.
- Звонки на службу через опубликованный интерфейс службы работают нормально; то есть нет недостающих ссылок "внутри" в службе.
- Вызов непосредственно публичным методам в проекте службы, из проекта вне службы, вызовет эту ошибку, даже если EF не используется в этом проекте; только внутренне в названном проекте
Третий момент - это то, что отбросило меня на время, и я все еще не уверен, почему это требуется. Добавление ref в EF6 в моем проекте Integration Test разрешило его в любом случае...
Ответ 12
Я просто столкнулся с этой проблемой сегодня. У меня есть библиотека классов репозитория данных с пакетом EF63 NuGet и консольное приложение для тестирования, которые имеют ссылку только на проект библиотеки классов. Я создал очень простую команду post-build, которая копирует EntityFramework.SqlServer.dll из библиотеки Bin\Debug библиотеки классов в консольное приложение Bin\Debug folder и проблема решена. Не забудьте добавить раздел entityFramework в консольный файл .config приложения.
Ответ 13
Добавьте ниже в свой app.config.
<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>
Ответ 14
Я только что переустановил Entity Framework с помощью Nuget.
И следуйте инструкциям, написанным по ссылке ниже:
http://robsneuron.blogspot.in/2013/11/entity-framework-upgrade-to-6.html
Я думаю, проблема будет решена.
Ответ 15
Вы должны принудительно установить статическую ссылку на сборку EntityFramework.SqlServer.dll, но вместо того, чтобы помещать фиктивный код, вы можете сделать это более красивым способом:
-
Если у вас уже есть класс DbConfiguration:
public class MyConfiguration : DbConfiguration
{
public MyConfiguration()
{
this.SetProviderServices(System.Data.Entity.SqlServer.SqlProviderServices.ProviderInvariantName, System.Data.Entity.SqlServer.SqlProviderServices.Instance);
}
}
-
Если у вас нет класса DbConfiguration, вы должны поместить следующий код при запуске приложения (до использования EF):
static MyContext()
{
DbConfiguration.Loaded += (sender, e) =>
e.ReplaceService<DbProviderServices>((s, k) => System.Data.Entity.SqlServer.SqlProviderServices.Instance);
}
Ответ 16
Я попробовал почти все выше, и ничего не получилось.
Только когда я установил связанные DLL файлы в свойствах Project Project EntityFramework
и EntityFramework.SqlServer
Copy Local
True
, он начал работать!
Ответ 17
У меня была связанная с этим проблема при переходе с CE db на Sql Server на Azure. Просто потратил впустую 4 часа, пытаясь решить это. Надеюсь, это может спасти кого-то подобную судьбу. Для меня у меня была ссылка на SqlCE в моем файле package.config. Удаление этой проблемы решило мою проблему и позволило мне использовать миграции. Yay Microsoft для другой технологии с излишне сложными настройками и настройками.
Ответ 18
Удаление BIN-папки сделало это для меня
Ответ 19
Кроме того, убедитесь, что проект запуска - это проект, содержащий ваш dbcontext (или соответствующий app.config). Mine пыталась запустить проект веб-сайта, который не имел всех необходимых параметров конфигурации.
Ответ 20
У меня была такая же проблема, просто скопировал файл App Config из проекта, содержащего DBContext, в мой тестовый проект
Ответ 21
У меня было то же самое исключение. Я включил
using System.Data;
using System.Data.Entity;
и все снова работает.
Ответ 22
Как сообщение показывает, что нам нужно добавить поставщика System.Data.SqlClient, поэтому нам нужно установить пакет nuget EntityFramework с двумя dll, но если мы разрабатываем только консольное приложение, нам просто нужно добавить ссылку EntityFramework.SqlServer.dll
Ответ 23
всем мне нужно ваше внимание, что две dll EntityFramework.dll и EntityFramework.SqlServer.dll являются библиотекой слоев DataAccess. И не логично использовать их во взглядах, либо любой другой layer.it решает вашу проблему, но это не логично.
Логический способ заключается в том, что атрибут enitiess удаляет и заменяет их Fluent API. Это реальное решение
Ответ 24
Примечание. У меня была эта проблема при создании базы данных Sql из модели. Он создал все таблицы в порядке, но не экспортировал изменения. Вы должны заметить, что эта ошибка возникает при попытке экспортировать sql с использованием шаблона генерации DDL в качестве SSDLtoSQL10. Он ожидает подключения MySQL здесь, поэтому убедитесь, что вы выбрали из раскрывающегося шаблона генерации DDL SSDLtoMySQL свойства Model. Провел целый день на этом!
Ответ 25
У меня было одно консольное приложение и библиотека классов. В библиотеке классов я создал модель данных сущности (щелкните правой кнопкой мыши на библиотеке классов > Добавить > новый элемент > данные > ADO.NET Entity Data Model 6.0) и поместите ссылку внутри консольного приложения. Итак, у вас есть консольное приложение, которое имеет ссылку на библиотеку классов и внутри класса библиотеки, у вас есть модель EF. У меня была такая же ошибка, когда я попытался получить некоторые записи из таблицы.
Я решил эту проблему, выполнив следующие шаги:
- Щелкните правой кнопкой мыши по решению и выберите вариант "Управление пакетами NuGet для решения" и откроется окно менеджера пакетов NuGet.
- Перейдите в раздел "Управление" в разделе "Установленные пакеты".
СОВЕТ. Entity Framework добавляется в библиотеку классов, поэтому вы должны иметь EntityFramework в разделе "Установленные пакеты", и вы увидите "Manage'option"
- Нажмите "Управление" и установите флажок для установки пакета в проект, который имеет ссылку на библиотеку классов, которая содержит EF-модель (в моем случае я установил флажок для установки пакета в консольное приложение, которое ссылалось на библиотеку классов, в которой была модель EF внутри)
Это все, что я должен был сделать, и все отлично работало.
Я надеюсь, что это помогло.
Ответ 26
В моем случае все работало правильно, а затем внезапно перестало работать, потому что я думаю, что Resharper изменил некоторые изменения, которые вызвали проблему. Мой проект был разделен на слой данных, уровень обслуживания и презентации. Я установил инфраструктуру Entity и ссылался на свой уровень данных, но все же ошибка не исчезла. Деинсталляция и переустановка не работали. Наконец, я решил его сделать слой данных проектом Startup, выполнить миграцию, обновить базу данных и изменить проект Startup на мой уровень представления.
Ответ 27
Разверните файл YourModel.edmx и откройте класс YourModel.Context.cs под MyModel.Context.tt.
Я добавил следующую строку в раздел использования, и ошибка была исправлена для меня.
с использованием SqlProviderServices = System.Data.Entity.SqlServer.SqlProviderServices;
Возможно, вам придется добавить эту строку в файл каждый раз, когда файл будет создан автоматически.
Ответ 28
У меня также была аналогичная проблема. Моя проблема была решена путем выполнения следующих действий:
![введите описание изображения здесь]()
![введите описание изображения здесь]()