Подтвердить что ты не робот

Поставщик Entity Framework не найден для поставщика услуг "MySql.Data.MySqlClient" ADO.NET

Я пытаюсь использовать Entity Framework с MySQL, и я получаю вышеуказанную ошибку. У меня установлен последний соединитель MySQL.

Полная ошибка:

No Entity Framework provider found for 'MySql.Data.MySqlClient' ADO.NET provider. Make sure the provider is registered in the 'entityFramework' section of the application config file.

Однако я не могу найти ничего, что подсказывает, как вы зарегистрируете его в разделе "entityFramework".

Некоторые другие сообщения (пример) предлагают добавить поставщика в раздел system.Data DbProviderFactories следующим образом:

<DbProviderFactories>
  <add 
    name="MySQL Data Provider"
    invariant="MySql.Data.MySqlClient"
    description=".Net Framework Data Provider for MySQL"
    type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, 
    Version=6.2.3.0, Culture=neutral, 
    PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>

Но это не работает, потому что он утверждает, что имя invariant дублируется. И, если я действительно перейду через System.Data.Common.DbProviderFactories, я вижу, что последний из них - поставщик MySQL:

MySQL Data Provider
.Net Framework Data Provider for MySQL
MySql.Data.MySqlClient
MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.6.5.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d

Итак, провайдер есть, но EF отказывается его использовать. Любые идеи?

Моя полная конфигурация выглядит следующим образом:

<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.data>
   <!--<DbProviderFactories>
   <add 
    name="MySQL Data Provider"
    invariant="MySql.Data.MySqlClient"
    description=".Net Framework Data Provider for MySQL"
    type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, 
    Version=6.2.3.0, Culture=neutral, 
    PublicKeyToken=c5687fc88969c44d" />
   </DbProviderFactories>-->
</system.data>

<connectionStrings>
    <add name="myContext" connectionString="server=****;User Id=****;password=****;Persist Security Info=True;database=myDb"
  providerName="MySql.Data.MySqlClient" />
</connectionStrings>
<startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>

<entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v11.0" />
      </parameters>
    </defaultConnectionFactory>

</entityFramework>

</configuration>
4b9b3361

Ответ 1

Nevermind. Я заметил, что у меня установлен EF 6. Я удалил его и вместо этого попробовал EF 5 (что NuGet говорит о последней стабильной версии), и он начал работать.

Тем не менее, более полезное сообщение об ошибке было бы приятным!

Ответ 2

в EF5 или меньше, все нормально. в EF6 вам нужно использовать mysql connector 6.8.x и добавить DbConfigurationTypeAttribute к вам DbContext:

[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
public class DemoContext : DbContext{}

который MySqlEFConfiguration находится в MySql.Data.Entity.EF6.dll в 6.8.x. Попробуйте!

Ответ 3

Вам нужно создать этот раздел в config (EF 5):

<entityFramework>
  <!-- ... -->
  <providers>
    <provider invariantName="MySql.Data.MySqlClient"
              type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity" />
  </providers>
</entityFramework>

Обновление: Используйте это определение для EF 6:

<entityFramework>
  <!-- ... -->
  <providers>
    <provider invariantName="MySql.Data.MySqlClient"
              type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" />
  </providers>
</entityFramework>

Благодаря elcool.

Ответ 4

Просто добавив сводку версий (поскольку я видел, что вы пытаетесь использовать 6.2, который слишком старый)

  • Для EF4 используйте Connector/NET 6.6.x(текущий GA равен 6.6.6)
  • Для EF5 используйте Connector/NET 6.7.x(текущий GA равен 6.7.4) или Connector/NET 6.8.x(текущий GA равен 6.8.3).
  • Для EF6 используйте Connector/NET 6.8.x(текущий GA равен 6.8.3).

Ответ 5

Я обновил с EntityFramework 5.0 до 6.1 и соединитель MySQL 6.8.3 и только должен был добавить атрибут, чтобы снова начать работу. Перед добавлением атрибута все будет компилироваться отлично, но сбой во время выполнения.

[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
public class DemoContext : DbContext{}

Ответ 6

У меня была такая же ситуация при настройке среды Visual Studio Professional 2017 с MySQL, ADO.NET(Database First) и EF6.

Пройдя ад с каждым доступным коннектором /NET, я получил его для работы с Connector/NET v6.9.10 и выполнил следующие шаги.

  • Удалите/удалите "Connector/NET" и "MySQL для Visual Studio", если они установлены.

  • Установите "MySQL для Visual Studio" v2.0.5 CTP (MySQL для Visual Studio). Примечание. Установите MySQL для Visual Studio до Connector/NET.

  • Установите "Connector/NET" v6.9.10 (Коннектор/Сеть). https://i.stack.imgur.com/XOT1I.jpg Примечание. Сначала я попытался использовать Connector/NET v6.8, v6.10 и v8, но ни один из них не работал Здесь вы можете найти все версии совместимости и совместимости с IDE Visual Studio, но пока этот список неточен.

  • Загрузите и установите "EntityFramework" v6.2.0 через NuGet.

  • Добавьте ссылки на C:\Program Files (x86)\MySQL\Connector.NET 6.9.10\Assemblies\v4.5\MySql.Data.dll а также C:\Program Files (x86)\MySQL\Connector.NET 6.9.10\Assemblies\v4.5\MySql.Data.Entity.EF6.dll.

  • Добавьте информацию о поставщике MySQL EF6 внутри App.config для поставщиков инфраструктуры сущностей:

<entityFramework>
       <providers>
         <provider invariantName="MySql.Data.MySqlClient"
              type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" />
       </providers>
</entityFramework>

Ответ 7

Я пробовал каждую комбинацию строк и настроек config, но я, наконец, понял это. Мое решение имеет исходный код в одном проекте и тесты в другом. Я использовал Entity Framework 6.1.1 и установил MySql Connector 6.8.3 и MySql для Visual Studio 1.2.3.

Проблема заключалась в том, что я управлял пакетами NuGet, но только включил их в основной проект. Решение заключалось в

  • Щелкните правой кнопкой мыши на Solution (верхний уровень в проводнике решений).
  • Управление пакетами Nuget для решения
  • Перейдите на вкладку "Установленный"
  • Для всех связанных с EntityFramework пакетов (MySql.Data, MySql.Data.Entities, MySql.ConnectorNET.Entity и MySql.ConnectorNET.Data) выберите их, затем выберите кнопку "Управление".
  • Включить каждый пакет для всех проектов.

Ответ 8

В дальнейшем обратитесь к официальному руководству по использованию MySQL Connector/Net с EF 6, который включает в себя все необходимые шаги (сборки, конфиги и т.д.): Глава 10 Поддержка EF 6

Ответ 10

В моем случае это была недостающая ссылка. Когда вы обновляетесь до EntityFramework 6, вам нужно добавить ссылку на сборку

System.Data.Entity

Я думаю, потому что MySql.Data.Entity.EF6 наследует от кучу вещей в этой сборке, что он не для предыдущей версии EF.

Когда ваш app.config хорош, и все ваши ссылки кажутся прекрасными, это решение стоит проверить.

Ответ 11

Может ли только поставщик MySql установлен в machine-config (например, установщик коннектора .net? Также соединение по умолчанию factory должно быть чем-то вроде "MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version = 6.7.4.0, Culture = neutral, PublicKeyToken = c5687fc88969c44d" Я думаю...