Поставщик Entity Framework не найден ADO.NET провайдер с инвариантным именем ' System.Данные.В sqlclient'



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




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




enter image description here

1014   30  

30 ответов:

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

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

PM> Install-Package EntityFramework

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

вам не нужно устанавливать Entity Framework в консольное приложение, вам просто нужно добавить ссылку на сборку EntityFramework.От SQLServer.файл DLL. Эту сборку можно скопировать из проекта библиотеки классов, использующего Entity Framework, в папку LIB и добавить ссылку на нее.

в итоге:

  • библиотеки классов приложения:
    • Установить Entity Framework
    • напишите свой код слоя данных
    • приложение.конфиг файл имеет всю конфигурацию, связанную с Entity Framework, за исключением строки подключения.
  • создать консольное, веб-или настольное приложение:
    • добавить ссылку на первый проект.
    • добавить ссылку на EntityFramework.От SQLServer.файл DLL.
    • приложение.config / web.config имеет строку подключения (помните, что имя записи конфигурации должно совпадать с именем класса DbContext.

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

вы также можете увидеть это сообщение, если вы забыли включить " EntityFramework.От SQLServer.файл DLL."

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

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

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

чтобы решить эту проблему в тестовом проекте просто поместите этот метод внутри тестового проекта:

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

этот метод никогда не вызывался, но по моим наблюдениям компилятор удалит все "ненужные" сборки и без использования EntityFramework.SqlServer материал тест не проходит.

вместо добавления 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-dependencies-and-copy-local-fails-to-copy/

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

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

.

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

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

private volatile Type _dependency;

public MyClass()
{
    _dependency = typeof(System.Data.Entity.SqlServer.SqlProviderServices);
}

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

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

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

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

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

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

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

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

третий момент-это то, что сбило меня с толку на некоторое время, и я все еще не уверен, почему это требуется. Добавление ссылки на EF6 в мой тестовый проект интеграции решило его в любом случае...

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

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

добавить ниже в приложение.конфиг.

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

вы должны заставить статическую ссылку на 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);
    }
    

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

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

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

  • EntityFramework.dll
  • EntityFramework.От SQLServer.dll

добавлять <section> до <configSections> часть .файл конфигурации в стартовом проекте делает первую сборку доступной в этом каталоге bin. Вы можете скопировать это из .конфигурационный файл вашей 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\

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

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

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

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

логический способ заключается в том, что атрибут enitiess удаляет и заменяет их Fluent API.это реальное решение

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

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

  1. щелкните правой кнопкой мыши на решении и выберите опцию "Управление пакетами NuGet для решения", и появится окно диспетчера пакетов NuGet.
  2. перейдите к опции "управление" в разделе "установленные пакеты" Совет: Entity Framework добавляется в библиотеку классов, поэтому у вас будет EntityFramework в разделе "установленные пакеты", и вы увидите "Manage" Option
  3. нажмите на опцию "Управление" и проверьте, чтобы установить пакет в проект, который имеет ссылку на библиотеку классов, которая содержит EF модель (в моем случае я установил флажок для установки пакета в консольное приложение, которое имело ссылку на библиотеку классов, которая имела модель EF внутри)

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

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

У меня тоже было подобное problem.My проблема была решена путем выполнения следующих действий:

enter image description here

enter image description here

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

var results = _dbContext.MyModel.ToList();

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

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

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

enter image description here

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

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

У меня было такое же исключение. Я включил

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

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

Как сообщение показывает, что нам нужно добавить систему провайдера.Данные.SqlClient вот почему нам нужно установить пакет nuget EntityFramework, который имеет две dll, но если мы разрабатываем только консольное приложение, нам просто нужно добавить ссылку на EntityFramework.От SQLServer.dll

Примечание: у меня была эта проблема при создании базы данных Sql из модели. Он создал все таблицы в порядке, но не будет экспортировать изменения. Вы должны заметить, что эта ошибка возникает при попытке экспортировать sql с помощью шаблона генерации DDL как SSDLtoSQL10. Он ожидает подключения MySQL здесь, поэтому убедитесь, что вы выбрали из выпадающего шаблона генерации DDL SSDLtoMySQL в свойствах модели. Потратил на это целый день !

в моем случае все работало правильно, а затем внезапно перестало работать, потому что я думаю, что Resharper изменил некоторые изменения, которые вызвали проблему. Мой проект был разделен на уровень данных, сервис и презентационный уровень. Я установил Entity framework и ссылался на свой уровень данных, но все же ошибка не исчезла. Удаление и переустановка также не сработали. Наконец, я решил ее с помощью сделать слой данных стартовым проектом, сделать миграцию, обновить базу данных и изменение стартового проекта обратно на мой уровень презентации.

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

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

использование SqlProviderServices = System.Данные.Сущность.От SQLServer.SqlProviderServices;

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

Comments

    Ничего не найдено.