Поставщик ADO.NET с инвариантным именем "MySql.Data.MySqlClient" либо не зарегистрирован в файле конфигурации устройства или приложения

У меня есть решение asp.net, использующее сущность framework 6 для сервера mysql.

теперь я должен работать над этим решением на новой машине,
но у меня есть некоторые проблемы:
1) при создании решения я получаю сообщение об ошибке: "Поставщик ADO.NET с инвариантным именем" MySql.Data.MySqlClient "либо не зарегистрирован в файле конфигурации устройства или приложения".

error screenshot

App.config:

<entityFramework>
  <providers>
    <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
  </providers>
</entityFramework>
<system.data>
  <DbProviderFactories>
    <remove invariant="MySql.Data.MySqlClient" />
    <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.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
  </DbProviderFactories>
</system.data>  

2) при открытии файла model.edmx я получаю сообщение:
"дизайнер режима сущности не может отобразить запрошенный файл".

error screenshot

Я установил на машину:

1) Разъем mysql/сеть 6.9.9
2) mysql для визуальной студии 1.2.6
3) Разъем mysql odbc 5.3.6.

что я могу сделать?

Ответы

Ответ 1

Я следил за большинством предлагаемых решений в Интернете, но, к сожалению, все были провалены. Проблема возникает из-за отсутствия визуальной студии для соединителя MySql, и я решил ее, установив mysql-connector-net-7.0.4 (https://downloads.mysql.com/archives/c-net/)

Ответ 2

У меня не было никакого соединителя MySql, установленного на моей машине. Исправлено, установив nuget: MySql.ConnectorNET.Entity

enter image description here

Ответ 3

Вышеупомянутые решения не сработали для меня. Однако, вдохновленный этим ответом, я смог решить эту проблему, удалив информацию о версии под тегом entityFramework в файле Web.config:

    <entityFramework>
      <defaultConnectionFactory
       type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.Entity.EF6" />
      <providers>
        <provider invariantName="MySql.Data.MySqlClient"
         type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d">
        </provider>
      </providers>
    </entityFramework>

будет выглядеть так:

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

ETA: Как указано в этом дополнении, также может потребоваться вручную отредактировать версию MySql.Data в файле Web.config:

<dependentAssembly>
    <assemblyIdentity name="MySql.Data" culture="neutral" publicKeyToken="c5687fc88969c44d" />
    <bindingRedirect oldVersion="0.0.0.0-6.9.9.0" newVersion="6.9.9.0" />
</dependentAssembly>

Ответ 4

Это работает для меня со следующим разделом в app.config:

<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" />
    </DbProviderFactories>
</system.data> 

Ответ 5

Я сделал много Google и найти решение Убедитесь, что MySQL.Data.dll, MySQL.Web.dll, MySQL.Data.Entity.dll и System.Data.Entity.dll все копируются локально (щелкните правой кнопкой мыши на сборке и убедитесь, что для параметра "Копировать локально" установлено значение "истина". Я также добавил следующее локально, когда пытался отладить эту проблему, но это, вероятно, было ненужным. System.Data.dll [возможно, необязательный] System.Data.Entity.Design [вероятно, необязательный]

И вот шаг, о котором вы не будете читать во многих местах в Google или AppHarbor! Добавьте следующее в ваш файл web.config:

  <system.data>
  <DbProviderFactories>
    <clear />
    <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.4.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
  </DbProviderFactories>
</system.data>

Ответ 6

Чтобы решить эту проблему, в дополнение к изменениям, изложенным в этом сообщении, мне также пришлось вручную отредактировать версию MySql.Data в web.config следующим образом:

<dependentAssembly>
    <assemblyIdentity name="MySql.Data" culture="neutral" publicKeyToken="c5687fc88969c44d" />
    <bindingRedirect oldVersion="0.0.0.0-6.9.9.0" newVersion="6.9.9.0" />
</dependentAssembly>

Ответ 7

Удалите старую ссылку MySql.Data.Entity.EF6 из списка ссылок. Переустановите через менеджер пакетов Nuget и он будет работать /

Ответ 8

Вы должны добавить codeConfigurationType="MySql.Data.Entity.MySqlEFConfiguration, MySql.Data.Entity.EF6" в вашем файле конфигурации или вызовите DbConfiguration.SetConfiguration(new MySqlEFConfiguration()) при запуске приложения.