Не знайдено постачальника Entity Framework для постачальника ADO.NET з інваріантною назвою "System.Data.SqlClient"


542

Після завантаження EF6 за допомогою nuget та спробу запустити мій проект, він повертає таку помилку:

Не знайдено постачальника Entity Framework для постачальника ADO.NET з інваріантною назвою "System.Data.SqlClient". Переконайтеся, що постачальник зареєстрований у розділі "entitFramework" у файлі конфігурації програми. Для отримання додаткової інформації див. Http://go.microsoft.com/fwlink/?LinkId=260882 .

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


Я використовую EF5 без providersі providerт.п., тож подумайте про його видалення?
ta.speot.is

1
помістіть сюди копію вашого рядка зв’язку
піловер

Рядок підключення є на малюнку (App.confing), до речі, дуже простий, я називаю конструктор public BaseStorage(): base ("RaptorDB") {}, BaseStorage () успадковує від DbContext в EF5 все працювало чудово, а не в EF6.
Fernando Vellozo

10
Проблема буде вирішена шляхом встановлення другого проекту (консолі) EF6, дякую всім, хто будь-яким чином допоміг!
Фернандо Веллозо

3
Для мене, здавалося, це було викликано Visual Studio, не розуміючи, що збірка EntityFramework.SqlServer насправді використовується базовим проектом. Якщо ви робите щось на кшталт відповіді @ Carra , вам не доведеться додавати EF до кожного проекту, який посилається на ваш базовий проект - набагато чистіше.
tehDorf

Відповіді:


608

Я щойно потрапив у ту ж проблему, і це виглядає як EntityFramework, хоча встановлений з NuGet Package Manager був неправильно встановлений у проекті.

Мені вдалося виправити це, виконавши таку команду на консолі менеджера пакунків :

PM> Install-Package EntityFramework

34
PMC написав, що "EntityFramework 6.0.1" вже встановлений, але додав його до моєї консольної програми (яка доказливо НЕ використовує EF), але це зробило трюк і для мене. Я видаляю EF з посилань на консольні програми, повертається помилка, я цього не отримую - моя консольна програма використовує проект сховища (для якого використовується EF) Дякуємо за допомогу!
Prokurors

33
Не забудьте додати до командного рядка -ProjectName <ProjectName>, якщо у вашому рішенні є кілька проектів ... !!!
Євгеніо Міро

1
Використовуючи -Preопцію Tell nuget для встановлення попередніх випусків пакетів Я не рекомендую його використовувати. У мене схожа помилка, але рішенням було просто встановити EntityFramework у хост-проект. Я встановив його в бібліотеці класів, але не в основному проекті (веб / консоль / чи що завгодно),
Девід Ікарді

10
Тут же проблема. У мене був проект, який не мав посилання на EF, але dll EF знаходився в папці Debug. Запуск цієї команди проти цього проекту додано EntityFramework.SqlServer.dllв папку Налагодження - проблема вирішена.
qujck

4
У моїй ситуації ця помилка не виявилася, поки я не розгорнув проект на наш тестовий сервер. Дійсно, EntityFramework.SqlServer.dll відсутній, і встановлення EF через менеджер пакунків працювало. Він просто додав дві відповідні посилання на проект, а потім додав налаштування entraramework до web.config. Я думаю, що місцевий IIS зміг отримати джерело збірки локально, але повний IIS на веб-сервері не міг через дозволів?
Atters

383

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


246
Це абсолютно смішна відповідь. Чому на землі мені це потрібно було зробити? А ви знаєте, що ще смішніше? Це працює.
Роберт

19
Дивіться мою відповідь нижче, вам не потрібно встановлювати EF у консольній програмі.
Франциско Голденштейн

7
Ви відповідаєте правильно. Додайте лише посилання EntityFramework.SqlServer.dll до проекту frontend, який використовує бібліотеку з EF, і вирішіть проблему. Тому не використовуйте цей EF (тільки DLL)
харвійте

31
Вам не потрібно додавати посилання на EF у консоль / веб-додаток. Вам просто потрібно переконатися EntityFramework.SqlServer.dll, що вона копіюється в каталог бін. Додавання чіткої посилання може порушити вашу архітектуру (якщо ви побудували кілька ярусів, ваша збірник, що виконує найвищий рівень, навіть не повинен знати про EF). Натомість ви можете переконатися, що постачальник SQL Server скопійований. Дивіться, наприклад , stackoverflow.com/a/19130718/870604
ken2k

3
Я підозрюю, що причина EntityFramework.SqlServer.dll не виявляється як залежність, тому що Entity Framework динамічно завантажує її. Як ваш проект повинен знати копіювання через постачальника SQL, коли єдине посилання на нього знаходиться у конфігураційному файлі?
Joel McBeth

209

Вам не потрібно встановлювати Entity Framework у своєму додатку Console, просто потрібно додати посилання на збірку 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 mb, або витягніть проект nuget, який становить> 5,5 mb. Трохи зменшує вартість архітектури багаторівневих. Поганий показ від MS насправді: у мене 4 яруси, і мій верхній рівень дійсно не повинен мати причин нічого знати про EF
72GM

18
Досі смішно все одно. наприклад, чому передній кінець потребує посилання на SqlServer? Передній кінець міг би не менше піклуватися, в моєму випадку. Але це працює. +1
Майк де Клерк

2
Це було корисно. Дуже дякую.
peter_the_oak

1
Чи не ускладнить це оновлення версій EntityFramework? Вам потрібно було б пам’ятати, щоб піти і оновити посилання на DLL
розчавити

114

Ви також можете переглянути це повідомлення, якщо забудете включити "EntityFramework.SqlServer.dll".

Схоже, це нещодавно доданий файл в EF6. Спочатку я не включив його до свого модуля злиття і наткнувся на проблему, перелічену тут.


7
Я зіткнувся з цією проблемою, коли раніше у мене був проект (а) із посиланням на проект (b), який мав посилання на EF. Після очищення та вилучення папки бін проекту (a), а потім відновлення, посилання на посилання на EF, але не EF.SqlServer.dll. Скопіювавши це вручну для мене
Dan Richardson

2
Дякуємо @dan richardson за те, що згадували про "видалення папки бінь".
Райджекар Редді

Я отримав помилку при спробі запуску сценарію LINQPad після оновлення EF6. Навіть посилання на EntityFramework.SqlServer.dll у LINQPad не виправив це до тих пір, поки я не переробив своє рішення у VS2013. Після цього нова посилання вирішена належним чином у LINQPad і мій сценарій запустився!
Кріс

У моєму випадку у програмі Dev навколишнє середовище все було нормально, але коли я опублікував, з'являється згаданий випуск. Після порівняння списку бібліотек dev з папкою bin на сервері я помітив відсутність EntityFramework.SqlServer.dll, я просто завантажував його та оновлював додаток, і вуалі виправляв його.
Генрі Родрігес

Це було проблемою для мене, дякую! Дивіться чисте рішення від @Anders, щоб уникнути проблем, забувши включити DLL у кожен необхідний проект.
SharpC

54

Замість того, щоб додавати EntityFramework.SqlServer до хост-проекту, ви можете забезпечити статичну посилання на нього з вашого проекту модель / об'єкта, як це

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-dependitions-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 для рішення"
Juha Palomäki

насправді вам потрібно вкластися в будь-який проект (не тільки тест), щоб бути застрахованим, що System.Data.Entity.SqlServer буде включений до "набору результатів" після компіляції (зверніть увагу: Unity або інший інструмент IoC може змінити це правило, і ви потрібно викликати цей код з тестового проекту).
Роман Покровський

Це насправді найкраще рішення, оскільки вам не доведеться розповсюджувати посилання на рамки об'єктів скрізь у своєму проекті.
Даніель Лобо

Це вказувало мені на правильний напрямок. EntityFramework.SqlServerДодаються в бібліотеку класів, але якщо не використовується, він не буде поміщений у вихідний папці програми. Я вирішив проблему, додавши 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;
        }
    }
}

.


Вибачте, намагаюся відкликати це ... так як я не думав, що це буде працювати ... і це робить! ... Він говорить, що я не можу змінити свій голос, якщо відповідь не буде відредагована, тому що це було занадто довго і з тих пір заблоковано ...
Seabizkit

Це працювало і для мене. У нас є проект бібліотеки, що використовує EF 6, і консольний додаток, який використовує бібліотеку. Ми отримували той самий виняток, що і ОП. Ми не хочемо розміщувати специфічну для EntityFramework конфігурацію у файлі конфігурації додатків, тому цей метод працював для нас. Спасибі
Роб

1
Куди дзвониш, FixEfProviderServicesProblemя спробував у конструкторі, не пощастивши.
Френсіс Дюхарме

1
Я ніколи його не називаю - не треба. Те, що там є, змушує .net вважати його необхідним і включає EntityFramwork як залежність.
Йоганнес

Напевно, від stackoverflow.com/a/19130718/1467396 ? Але +1 у будь-якому разі для наочності в тому, як / де ним користуватися.
Давид

20

Жодне з них не працювало на мене. Я знайшов рішення в іншому стартовому запитанні . Я додам його сюди для зручності:

Вам потрібно зробити посилання, щоб воно було скопійовано в шлях до програми. Тому що пізніше на нього буде посилатися під час виконання. Тому вам не потрібно копіювати жодні файли.

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 автоматично додадуть реєстрації до конфігураційного файлу. Я побіг PM> Install-Package EntityFramework.SqlServerCompactвирішити проблему.


2
Я справді вражений, поки ніхто за це не проголосував! У повідомленні про помилку чітко зазначено: причина помилки полягає в тому, що після оновлення EF насправді не залишається визначення постачальника для SQL Compact у файлі web.config програми! Додаючи вказаний пакет, виправляє файл web.config, і там буде визначено провайдера.
Csaba Toth

1
просто збереження життя. Він повинен бути позначений як відповідь, оскільки він чітко забезпечує вирішення проблеми
ZafarYousafi

7

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

Я вже деякий час використовую цей параметр разом із EF5, не потребуючи включення посилань на EF з тестового проекту інтеграції.

Тепер, після поновлення до EF6, здається , мені потрібно включити посилання на EF6 в тесті інтеграції проекту теж, навіть якщо він не використовується ( в значній мірі як було зазначено вище, user3004275 ).

Показання, з якими ви стикаєтесь з тією ж проблемою:

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

Третій момент - це те, що мене відкинуло на деякий час, і я все ще не впевнений, чому це потрібно. Додавання посилання на EF6 в мій проект інтеграційного тесту вирішило його в будь-якому випадку ...


7

Коли помилка трапляється в тестових проектах, найкрасивішим рішенням є прикрасити тестовий клас:

[DeploymentItem("EntityFramework.SqlServer.dll")]

Дійсно, але створює більше роботи і простіше забути. Завдяки трюку "примусовий довідник" вам потрібно це робити лише на тих проектах, які дійсно потребують використання EF.
Чарльз Роберто Канато

7

Запуск проекту, який посилається на проект, де використовується Entity Framework, потребує наступних двох складок у своїй папці bin:

  • EntityFramework.dll
  • EntityFramework.SqlServer.dll

Додавання <section>до <configSections>файлу .config у проекті запуску робить першу збірку доступною в цьому каталозі бін. Ви можете скопіювати це з файлу .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 консолі програми та вирішена проблема. Не забудьте додати розділ entitFramework до файлу .config консолі програми.


4

Додайте нижче до своєї програми.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. Цей метод може бути використаний для заміни постачальника.
користувач1295211


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.

Я додав наступний рядок у розділі використання, і помилка була виправлена ​​для мене.

використання SqlProviderServices = System.Data.Entity.SqlServer.SqlProviderServices;

Можливо, вам доведеться додавати цей рядок у файл щоразу, коли файл автоматично створюється.


2

У мене також була подібна проблема. Мою проблему було вирішено виконавши наступні дії:

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

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


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). Майн намагався запустити проект веб-сайту, який не мав усіх необхідних налаштувань конфігурації.


1

Я спробував майже все вищесказане і нічого не вийшло.

Тільки тоді , коли я поставив посилання бібліотеки DLL в проекті по замовчуванням EntityFrameworkі EntityFramework.SqlServerвластивості , Copy Localщоб Trueзробив це почати працювати!


1

всім мені потрібна Ваша увага, що два dll EntityFramework.dll і EntityFramework.SqlServer.dll - це бібліотека шарів DataAccess. І використовувати їх не можна логічно, переглядаючи чи будь-який інший слой. Це вирішує вашу проблему, але це не логічно.

Логічний спосіб полягає в тому, що атрибут enitiess видаляє та замінює їх на Fluent API.це справжнє рішення


1

У мене була одна консольна програма та бібліотека класів. У бібліотеці класів я створив модель даних Entity (клацніть правою кнопкою миші на Бібліотека класів> Додати> Новий елемент> Дані> ADO.NET Entity Data Model 6.0) і помістив посилання всередині консольного додатка. Отже, у вас є консольна програма, яка має посилання на бібліотеку класів, а всередині бібліотеки класів у вас є модель EF. У мене була така ж помилка, коли я намагався дістати деякі записи із таблиці.

Я вирішив цю проблему, виконавши наступні кроки:

  1. Клацніть правою кнопкою миші рішення та виберіть опцію "Керувати пакетами NuGet для рішення", і з'явиться вікно менеджера пакунків NuGet.
  2. Перейдіть до параметра "Керування" у розділі "Встановлені пакети" Порада: Entity Framework додано до бібліотеки класів, тож у вас буде EntityFramework у розділі "Встановлені пакети", і ви побачите опцію "Керувати"
  3. Клацніть на опцію "Керувати" та встановіть прапорець, щоб встановити пакет до проекту, який має посилання на бібліотеку класів, яка містить модель EF (у моєму випадку я встановив прапорець для встановлення пакета в консольний додаток, який мав посилання на бібліотеку класів, яка мала модель EF всередині)

Це все, що я мав зробити, і все працювало ідеально.

Сподіваюся, це допомогло.


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


0

У мене була пов'язана проблема під час переходу з CE db на Sql Server на Azure. Тільки витратили 4 години, намагаючись вирішити це. Сподіваємось, це може врятувати когось подібну долю. Для мене я мав посилання на SqlCE у своєму файлі пакети.config. Видалення цього рішення вирішило всю мою проблему і дозволило використовувати міграції. Так, Microsoft для іншої технології з надмірно складними проблемами налаштування та налаштування.


0

У мене була така ж проблема, щойно скопіював файл програми Config з проекту, який містив DBContext, у мій тестовий проект


0

У мене був кинутий ідентичний виняток. Я включив

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

і все знову повертається до роботи ..


0

Оскільки повідомлення показує, що нам потрібно додати провайдера System.Data.SqlClient, тому нам потрібно встановити нут-пакунок EntityFramework, який має два dll, але якщо ми розробляємо лише консольний додаток, тоді нам просто потрібно додати посилання на EntityFramework.SqlServer.dll

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.