Поставщик ADO.NET с инвариантным именем "MySql.Data.MySqlClient" либо не зарегистрирован в файле конфигурации устройства или приложения
У меня есть решение asp.net, использующее сущность framework 6 для сервера mysql.
теперь я должен работать над этим решением на новой машине,
но у меня есть некоторые проблемы:
1) при создании решения я получаю сообщение об ошибке: "Поставщик ADO.NET с инвариантным именем" MySql.Data.MySqlClient "либо не зарегистрирован в файле конфигурации устройства или приложения".
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 я получаю сообщение:
"дизайнер режима сущности не может отобразить запрошенный файл".
Я установил на машину:
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
Ответ 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())
при запуске приложения.