Не найден поставщик Entity Framework для поставщика ADO.NET с инвариантным именем System.Data.SqlClient

543

После загрузки EF6 с помощью nuget и попытки запустить мой проект, он возвращает следующую ошибку:

Не найден поставщик Entity Framework для поставщика ADO.NET с инвариантным именем «System.Data.SqlClient». Убедитесь, что поставщик зарегистрирован в разделе «entityFramework» файла конфигурации приложения. См. Http://go.microsoft.com/fwlink/?LinkId=260882 для получения дополнительной информации.

введите описание изображения здесь

Фернандо Веллозо
источник
Я использую EF5 без providersи providerпрочее, так что подумайте об его удалении?
ta.speot.is
1
поместите копию вашей строки подключения здесь
pylover
Строка подключения показана на рисунке (App.confing), кстати, очень просто, я называю конструктор public BaseStorage(): base ("RaptorDB") {}, BaseStorage () наследует от DbContext в EF5, все работает отлично, еще не в EF6.
Фернандо Веллозо
10
Проблема будет решена установкой EF6, второго проекта (Console), спасибо всем, кто помогал любым способом!
Фернандо Веллозо
3
По-моему, это вызвано тем, что Visual Studio не осознавала, что сборка EntityFramework.SqlServer действительно использовалась базовым проектом. Если вы делаете что-то вроде ответа @ Carra , вам не нужно добавлять EF в каждый проект, который ссылается на ваш базовый проект - намного чище.
TehDorf

Ответы:

608

Я только что попал в ту же проблему, и это выглядит как EntityFramework, хотя установленный из диспетчера пакетов NuGet не был правильно установлен в проекте.

Мне удалось это исправить, выполнив следующую команду в консоли диспетчера пакетов :

PM> Install-Package EntityFramework
douglaslps
источник
34
PMC написал, что EntityFramework 6.0.1 уже установлен, но добавил его в мое консольное приложение (которое по закону НЕ использует EF), но у меня тоже получилось. Я удаляю EF из ссылок на консольные приложения, возвращаю ошибки, я не понимаю - мое консольное приложение использует проект репозитория (который использует EF) Спасибо за помощь!
Прокурорс
33
Не забудьте добавить -ProjectName <ProjectName> в командную строку, если у вас есть несколько проектов в вашем решении ... !!!
Эухенио Миро
1
Используя -Preопцию скажите nuget, чтобы установить пререлизные пакеты. Я не рекомендую использовать это. У меня похожая ошибка, но решение было просто установить EntityFramework в хост-проекте. Я установил его в библиотеке классов, но не в главном проекте (web / console / или где-либо еще),
Davide Icardi
10
Та же проблема здесь. У меня был проект, в котором не было ссылки на EF, но DLL EF была в папке Debug. Выполнение этой команды для этого проекта добавлено EntityFramework.SqlServer.dllв папку Debug - проблема решена.
Qujck
4
В моей ситуации эта ошибка не появлялась, пока я не развернул проект на нашем тестовом сервере. На самом деле это был EntityFramework.SqlServer.dll, который отсутствовал, и установка EF через менеджер пакетов работала. Он просто добавил две соответствующие ссылки на проект, а затем добавил настройки entityFramework в web.config. Я полагаю, что локальный IIS мог получать сборку локально, но полный IIS на веб-сервере не мог из-за разрешений?
Аттерс
384

Вы добавили EF в проект библиотеки классов. Вам также нужно добавить его в проект, который ссылается на него (ваше консольное приложение, веб-сайт или что-то еще).

Clément Picou
источник
248
Это абсолютно нелепый ответ. С какой стати мне это нужно делать? А знаете что еще смешнее? Оно работает.
Роберт
19
Смотрите мой ответ ниже, вам не нужно устанавливать EF в консольном приложении.
Франциско Гольденштейн
7
Вы ответите правильно. Только добавьте ссылку EntityFramework.SqlServer.dll в интерфейсный проект, который использует библиотеку с EF, исправьте проблему. Так что не используйте этот EF (только DLL)
harveyt
31
Вам не нужно добавлять ссылку на EF в консоли / веб-приложении. Вам просто нужно убедиться EntityFramework.SqlServer.dll, что копируется в каталог bin. Добавление строгой ссылки может нарушить вашу архитектуру (если вы создали несколько уровней, ваша исполняющая сборка верхнего уровня даже не должна знать об EF). Вместо этого вы можете убедиться, что поставщик SQL Server скопирован. См., Например, stackoverflow.com/a/19130718/870604
ken2k
3
Я подозреваю, что причина, по которой EntityFramework.SqlServer.dll не определяется как зависимость, заключается в том, что Entity Framework загружает его динамически. Как ваш проект должен знать, чтобы скопировать SQL-провайдера, когда единственная ссылка на него находится в файле конфигурации?
Джоэл МакБет
209

Вам не нужно устанавливать Entity Framework в вашем консольном приложении, вам просто нужно добавить ссылку на сборку EntityFramework.SqlServer.dll. Вы можете скопировать эту сборку из проекта библиотеки классов, который использует Entity Framework, в папку LIB и добавить ссылку на нее.

В итоге:

  • Приложение библиотеки классов:
    • Установить Entity Framework
    • Напишите свой код слоя данных
    • Файл app.config имеет всю конфигурацию, связанную с Entity Framework, кроме строки подключения.
  • Создайте консольное, веб-или настольное приложение:
    • Добавьте ссылку на первый проект.
    • Добавьте ссылку на EntityFramework.SqlServer.dll.
    • app.config / web.config содержит строку подключения (помните, что имя записи конфигурации должно совпадать с именем класса DbContext.

Я надеюсь, что это помогает.

Франсиско Гольденштейн
источник
18
Правильный ответ. Нет необходимости устанавливать EF. EntityFramework.SqlServer.dll.
Том Стиккель
15
Я должен согласиться. Это полностью правильный ответ. Ссылайтесь на dll размером 1/2 мб или потяните проект EF nuget, который составляет> 5,5 мб Немного снижает стоимость создания многоуровневых систем. Плохое шоу от MS: у меня 4 уровня, и у моего высшего уровня не должно быть оснований ничего знать об EF
72GM
18
Все равно смешно в любом случае. Например, зачем интерфейсу нужна ссылка на SqlServer? Передний конец не заботился бы меньше, в моем случае. Но это работает. +1
Майк де Клерк
2
Это было полезно. Большое спасибо.
peter_the_oak
1
Не затруднит ли это обновление версий EntityFramework? Вы должны были бы не забыть пойти и обновить ссылку на DLL
сокрушить
114

Вы также можете увидеть это сообщение, если забыли включить «EntityFramework.SqlServer.dll».

Похоже, это недавно добавленный файл в EF6. Первоначально я не включил его в свой модуль слияния и столкнулся с проблемой, перечисленной здесь.

Майк
источник
7
Я столкнулся с этой проблемой, когда у меня ранее был проект (а) со ссылкой на проект (б), который имел ссылку на EF. После очистки и удаления папки bin проекта (a), а затем перестройки, попалась ссылка EF, но не EF.SqlServer.dll. Копирование этого вручную сработало для меня
Дэн Ричардсон
2
@dan richardson спасибо за упоминание «удалить папку bin».
Раджшекар Редди
Я получил ошибку при попытке запустить скрипт LINQPad после обновления EF6. Даже ссылка на EntityFramework.SqlServer.dll в LINQPad не исправила его, пока я не перестроил свое решение в VS2013. Затем новая ссылка была правильно разрешена в LINQPad, и мой скрипт запустился!
Крис
В моем случае я был в порядке в среде разработки, но когда я опубликовал, появляется упомянутая проблема. После сравнения списка библиотек в dev с папкой bin на сервере я заметил, что EntityFramework.SqlServer.dll отсутствует, я просто загружаю его, обновляю приложение и вуаля исправляю.
Генри Родригес
Это была проблема для меня, спасибо! Посмотрите чистое решение @Anders, чтобы избежать проблем, забыв включить DLL в каждый необходимый проект.
SharpC
54

Вместо добавления 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/

Андерс
источник
5
Я думаю, что это хорошее чистое решение, в котором нам не нужно включать ссылки на связанные с постоянством библиотеки DLL в проекты, которые должны быть независимыми от устойчивости.
JTech
3
Согласен, и это относится к любой библиотеке с неявными зависимостями, а не только с постоянством
Андерс
3
Если у вас есть явная зависимость от типа в сборке, он будет скопирован процессом сборки. Однако здесь у вас нет явной зависимости, и процесс сборки не сможет скопировать сборку в папку сборки. Мой код просто убедился, что в указанной сборке существует явная ссылка на любой тип.
Андерс
2
Без этого не будет явной зависимости сборки от вашего кода, и она не будет скопирована в вывод
Anders
2
Это великолепно.
Крис
48

При установке Entity Framework 6 через Nuget. EntityFramework.SqlServer иногда пропускает другой исполняемый файл. Просто добавьте Nugetпакет в этот проект.

Иногда выше не работает для тестового проекта

Чтобы решить эту проблему в тестовом проекте, просто поместите этот метод в тестовый проект:

public void FixEfProviderServicesProblem()
{
    var instance = System.Data.Entity.SqlServer.SqlProviderServices.Instance;
}

Этот метод никогда не вызывался, но, по моим наблюдениям, компилятор удалит все «ненужные» сборки и без использования EntityFramework.SqlServerматериала тест не пройден.

Умар Аббас
источник
2
Ну, это не красиво, но это решило проблему, с которой я столкнулся в своем тестовом проекте. Ни одно из других решений не сработало.
Достопочтенный Чау
В моем случае было достаточно добавить Entity Framework также в мой тестовый проект в разделе «Управление пакетами Nuget для решения»
Юха Паломяки,
на самом деле вам нужно поместить в любой проект (не только тест), чтобы убедиться, что System.Data.Entity.SqlServer будет включен в «набор результатов библиотеки» после компиляции (примечание: Unity или другой инструмент IoC могут изменить это правило, и вы будете нужно вызвать этот код из тестового проекта).
Роман Покровский
На самом деле это лучшее решение, потому что вам не нужно распространять ссылки на структуры сущностей повсюду в вашем проекте.
Даниэль Лобо
Это указало мне в правильном направлении. Объект EntityFramework.SqlServerдобавляется в вашу библиотеку классов, но если он не используется, он не будет помещен в выходную папку вашего приложения. Я исправил проблему, добавив an ExecutionStrategy, что мне еще нужно было сделать, поэтому добавление строки, как SetExecutionStrategy("System.Data.SqlClient", () => new SqlAzureExecutionStrategy());внутри DbConfigurationкласса, решило проблему.
Jan_V
24

Добавить эту функцию

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;
        }
    }
}

,

Johannes
источник
извините, пытаясь отозвать его ... поскольку я не думал, что это сработает ... и это делает! ... он говорит, что я не могу изменить свой голос, если ответ не отредактирован, потому что это было слишком долго и с тех пор было заблокирован ...
Seabizkit
Это сработало и для меня. У нас есть проект библиотеки, который использует EF 6, и консольное приложение, которое использует библиотеку. Мы получили то же исключение, что и ОП. Мы не хотим помещать специфичную для EntityFramework конфигурацию в файл конфигурации приложения, поэтому этот метод работал для нас. Спасибо
Роб
1
Куда ты звонишь FixEfProviderServicesProblemя пробовал в конструкторе, не повезло.
Фрэнсис Дюшарм
1
Я никогда не называю это - не должен. Тот факт, что он есть, заставляет .net думать, что это необходимо, и включает EntityFramwork в качестве зависимости.
Йоханнес
Вероятно, из stackoverflow.com/a/19130718/1467396 ? Но +1, во всяком случае, для ясности в том, как / где его использовать.
Дэвид
20

Ничто из этого не помогло мне. Я нашел решение в другом вопросе stackoverflow . Я добавлю это здесь для удобства:

Вам нужно сделать ссылку, чтобы она была скопирована в путь приложения den. Потому что позже на него будут ссылаться во время выполнения. Таким образом, вам не нужно копировать какие-либо файлы.

private volatile Type _dependency;

public MyClass()
{
    _dependency = typeof(System.Data.Entity.SqlServer.SqlProviderServices);
}
Карра
источник
2
Эта! Нет необходимости добавлять ссылку на другие проекты, которые могут ссылаться на эту сборку.
TehDorf
8

Я получил ту же ошибку при использовании Entity Framework 6 с SQL Server Compact 4.0. Статья о MSDN для провайдеров Entity Framework для EF6 оказалась полезной. Выполнение соответствующих команд провайдера в виде пакетов nuget на консоли диспетчера пакетов может решить проблему, так как пакеты NuGet автоматически добавят регистрации в файл конфигурации. Я побежал, PM> Install-Package EntityFramework.SqlServerCompactчтобы решить проблему.

Майсары
источник
2
Я действительно поражен, что никто не голосовал за это до сих пор! Сообщение об ошибке ясно гласит: причина ошибки в том, что после обновления EF действительно не осталось определения поставщика для SQL Compact в файле web.config приложения! Добавление указанного вами пакета исправляет файл web.config, и там будет определен поставщик.
Чаба Тот
1
просто спасатель. Он должен быть помечен как ответ, так как он четко дает решение проблемы
ZafarYousafi
7

Сегодня столкнулся с этой проблемой при работе с набором веб-сервисов, каждый в разных проектах, и отдельным проектом, содержащим интеграционные тесты для некоторых из этих сервисов.

Я использовал эту настройку в течение некоторого времени с EF5, без необходимости включать ссылки на EF из Интеграционного тестового проекта.

Теперь, после обновления до EF6, мне кажется, что мне нужно включить ссылку на EF6 в проект интеграционного тестирования, даже если он там не используется (в значительной степени, как указано выше пользователем 3004275 ).

Признаки того, что вы столкнулись с той же проблемой:

  • Вызовы непосредственно в EF (подключение к БД, получение данных и т. Д.) Работают нормально, если они инициируются из проекта, который имеет ссылки на EF6.
  • Звонки в сервис через опубликованный интерфейс сервиса работают нормально; т.е. в сервисе отсутствуют пропущенные ссылки "внутри".
  • Вызовы напрямую к открытым методам в сервисном проекте, из проекта вне сервиса, вызовут эту ошибку, даже если EF не используется в этом проекте; только внутри в вызываемом проекте

Третий момент - это то, что меня оттолкнуло на некоторое время, и я до сих пор не уверен, зачем это нужно. Добавление ссылки на EF6 в моем проекте Integration Test решило это в любом случае ...

Kjartan
источник
7

Когда ошибка возникает в тестовых проектах, самое красивое решение - украсить тестовый класс:

[DeploymentItem("EntityFramework.SqlServer.dll")]
Альберто Хуан
источник
Это действительно красиво, но создает больше работы и легче забыть. С помощью трюка с «принудительной ссылкой» вам нужно сделать это только в тех проектах, которые действительно нуждаются в использовании EF.
Чарльз Роберто Канато
7

Для запуска проекта, который ссылается на проект, в котором используется Entity Framework, требуются следующие две сборки в папке bin:

  • EntityFramework.dll
  • EntityFramework.SqlServer.dll

Добавление <section>к <configSections>файлу .config в запускаемом проекте делает первую сборку доступной в этом каталоге bin. Вы можете скопировать это из файла .config вашего проекта Entity Framework:

<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>

Чтобы сделать второй DLL-файл доступным в папке bin, хотя это и нецелесообразно, можно сделать ручную копию из папки bin проекта Entity Framework. Лучшая альтернатива - добавить в события после сборки проекта Entity Framework следующие строки, которые автоматизируют процесс:

cd $(ProjectDir)
xcopy /y bin\Debug\EntityFramework.SqlServer.dll ..\{PATH_TO_THE_PROJECT_THAT_NEEDS_THE_DLL}\bin\Debug\
Леонель Б.
источник
2
Спасибо, у меня есть Entity Framework в слое данных, поэтому он изолирован, но, к сожалению, Microsoft не позволяет нам по-настоящему изолировать слой данных и заставляет нас загрязнять UX с помощью технологии баз данных. Я надеялся, что мне не придется это делать.
Мэтт
4

Я просто столкнулся с этой проблемой сегодня. У меня есть библиотека классов репозитория данных с пакетом EF63 NuGet и консольное приложение для тестирования, которые имеют ссылку только на проект библиотеки классов. Я создал очень простую команду после сборки, которая копирует EntityFramework.SqlServer.dll из папки Bin \ Debug библиотеки классов в папку Bin \ Debug консольного приложения, и проблема решена. Не забудьте добавить раздел entityFramework в файл .config консольного приложения.

Ондржей
источник
4

Добавьте ниже в ваш 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>
Таран
источник
Вы также должны зарегистрировать его <configSections>-<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
TryingToImprove
Это то, что делает «IInstall-Package EntityFramework». Это на самом деле не нужно, поскольку EntityFramework по умолчанию пытается загрузить EntityFramework.SqlServer.dll для имени инварианта SqlClient. Этот метод может быть использован для замены поставщика.
user1295211
3

Удаление BIN-папки сделало это для меня

Дэвид
источник
3

Вы должны принудительно установить статическую ссылку на сборку EntityFramework.SqlServer.dll , но вместо добавления фиктивного кода вы можете сделать это более красивым способом:

  1. Если у вас уже есть класс DbConfiguration :

    public class MyConfiguration : DbConfiguration
    {
        public MyConfiguration()
        {
            this.SetProviderServices(System.Data.Entity.SqlServer.SqlProviderServices.ProviderInvariantName, System.Data.Entity.SqlServer.SqlProviderServices.Instance);
        }
    }
  2. Если у вас нет класса DbConfiguration, вы должны поместить следующий код при запуске приложения (перед использованием EF):

    static MyContext()
    {
        DbConfiguration.Loaded += (sender, e) =>
            e.ReplaceService<DbProviderServices>((s, k) => System.Data.Entity.SqlServer.SqlProviderServices.Instance);
    }
Росберг Линхарес
источник
2

Я только что переустановил Entity Framework, используя Nuget. И следуйте инструкциям, написанным по ссылке ниже: http://robsneuron.blogspot.in/2013/11/entity-framework-upgrade-to-6.html

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

Кунтал Гош
источник
Объяснение было бы хорошо! Почему вы должны переустановить его и так далее
Rizier123
1
Поскольку по какой-то неизвестной причине (-ям) изменения не вступят в силу, и поэтому я переустановил EntityFramework 6.1.1, и после этого он вступит в силу.
Кунтал Гош
2

Разверните файл YourModel.edmx и откройте класс YourModel.Context.cs в YourModel.Context.tt.

Я добавил следующую строку в раздел использования, и ошибка была исправлена ​​для меня.

using SqlProviderServices = System.Data.Entity.SqlServer.SqlProviderServices;

Возможно, вам придется добавлять эту строку в файл каждый раз, когда файл создается автоматически.

user2347528
источник
2

У меня также была похожая проблема. Моя проблема была решена следующим образом:

введите описание изображения здесь

введите описание изображения здесь

BehrouzMoslem
источник
2

похоже, что никто не упомянул, сначала проверяя, установлен ли System.Data.SqlClient в системе и делается ли на него ссылка.

я решил свою проблему, установив System.Data.SqlClient и добавив нового поставщика в app.Config

<provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6"/>
Тоби Оволави
источник
1

Также убедитесь, что ваш стартовый проект - это проект, содержащий ваш dbcontext (или соответствующий app.config). Мой пытался запустить проект веб-сайта, который не имел всех необходимых параметров конфигурации.

user2588362
источник
1

Я перепробовал почти все вышеперечисленное и ничего не получалось.

Только тогда , когда я поставил ссылки библиотеки DLL в проекте по умолчанию EntityFrameworkи EntityFramework.SqlServerсвойства , Copy Localчтобы Trueсделал это начать работать!

SharpC
источник
1

Всем нужно ваше внимание, что два dll EntityFramework.dll и EntityFramework.SqlServer.dll являются библиотекой уровня DataAccess. И их использование не логично, или любой другой layer.it решает вашу проблему, но это не логично.

логично, что атрибут enitiess удаляет и заменяет их на Fluent API. Это реальное решение

Вахид Акбари
источник
1

У меня было одно консольное приложение и библиотека классов. В библиотеке классов я создал Entity Data Model (щелкните правой кнопкой мыши Class Library> Add> New Item> Data> ADO.NET Entity Data Model 6.0) и поместил ссылку в консольное приложение. Итак, у вас есть консольное приложение, которое имеет ссылку на библиотеку классов, а внутри библиотеки классов у вас есть модель EF. У меня была та же ошибка, когда я пытался получить некоторые записи из таблицы.

Я решил эту проблему, выполнив следующие действия:

  1. Щелкните правой кнопкой мыши решение и выберите опцию «Управление пакетами NuGet для решения», и появится окно диспетчера пакетов NuGet.
  2. Перейдите к параметру «Управление» в разделе «Установленные пакеты» СОВЕТ: Entity Framework добавлен в библиотеку классов, поэтому у вас будет EntityFramework в разделе «Установленные пакеты», и вы увидите вариант «Управление»
  3. Выберите опцию «Управление» и установите флажок для установки пакета в проект, который имеет ссылку на библиотеку классов, которая содержит модель EF (в моем случае я установил флажок для установки пакета в консольное приложение, которое имеет ссылку на библиотеку классов, в которой была модель EF)

Это все, что я должен был сделать, и все работало идеально.

Надеюсь, это помогло.

dkkd
источник
1

У меня такая же ошибка. Странно, что это происходит только всякий раз, когда я использую свой dbContext для запроса к любой моей модели или получаю ее список, например:

var results = _dbContext.MyModel.ToList();

Мы попытались переустановить Entity Framework, ссылаться на него правильно, но безрезультатно.

К счастью, мы попытались проверить Nuget на наличие ALLрешений, затем обновить все или убедиться, что everythingэто одна и та же версия, потому что мы заметили, что два проекта имеют разные версии EF в веб-проекте. И это работает. Ошибка ушла.

Вот скриншот о том, как управлять Nuget для всех решений:

введите описание изображения здесь

Вилли Дэвид младший
источник
1

Вы просто отсутствует ссылка на EntityFramework.SqlServer.dll. Для проектов EntityFramework, использующих SQL Server, вам необходимо обратиться к двум файлам: EntityFramework.SqlServer.dll и EntityFramework.dll

user2956314
источник
0

У меня была связанная проблема при переходе с БД CE на Sql Server в Azure. Просто потратил 4 часа, пытаясь решить эту проблему. Надеюсь, это может спасти кого-то похожую судьбу. Для меня у меня была ссылка на SqlCE в моем файле packages.config. Удаление его решило всю мою проблему и позволило мне использовать миграции. Microsoft для другой технологии с излишне сложными проблемами установки и настройки.

user2662643
источник
0

У меня возникла та же проблема, я просто скопировал файл конфигурации приложения из проекта, который содержал DBContext, в мой тестовый проект.

Стивен Эбичондо
источник
0

У меня было выброшено идентичное исключение. я включен

using System.Data; 
using System.Data.Entity;

и все снова работает

kneerunjun
источник
0

Как видно из сообщения, нам нужно добавить провайдера System.Data.SqlClient, поэтому нам нужно установить пакет nuget EntityFramework с двумя dll, но если мы разрабатываем только консольное приложение, то нам просто нужно добавить ссылку на EntityFramework.SqlServer.dll

Сандип Шехават
источник