Невозможно подключиться к базе данных MySQL с помощью Visual studio 2019

#c# #mysql #entity-framework #visual-studio-2019

#c# #mysql #entity-framework #visual-studio-2019

Вопрос:

Я пытаюсь настроить MySQL базу данных в dot net приложении. Для этого я установил его.

  1. MySQL для Visual Studio 1.2.9
  2. Connector / NET 8.0.22
  3. Entity Framework 6 (EF6)
  4. MySQL.Data.EntityFramework версии 8.0.22 через nuget

App.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" />
  <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.EntityFramework, Version=8.0.22.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d">
  </provider></providers>
  

Когда я пытаюсь добавить базу данных, я получаю сообщение об ошибке ниже

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

Я перепробовал почти все решения в стеке, но ничего не решает проблему.

Любая помощь будет высоко оценена.

Ответ №1:

Это явная проблема, так как ошибка просто гласит :

Поставщик базы данных Entity Framework несовместим с этой версией Entity Framework

В качестве ссылки внимательно рассмотрите шаги внутри connector net entityframework60, поскольку он описывает два типа .net-проектов (.net и .net core) для подключения к базе данных MySQL. В вашем случае следуйте минимальным требованиям для EF6 только для Windows и обратите внимание на версию и совместимость .NET Framework.

Будьте осторожны с тем, на что вы ссылались, и с тем, что вы установили, сравнивая файлы конфигурации со ссылками на сборки в вашем проекте. Я не знаю, насколько хорошо вы контролируете зависимости проекта. Если вы сравните раздел конфигурации, вы обнаружите, что он полностью отличается от вашего. И могут быть еще некоторые возможные нежелательные ошибки, которые мы не можем контролировать вдали от вас, а также мы не можем воспроизвести проблему.

Наконец, проверьте, что у вас есть внутри ссылок на сборки и файлов конфигурации. После внесения глубоких изменений вам, возможно, придется перезапустить Visual Studio, чтобы отследить, подтверждены они или нет.

Ответ №2:

Как указано в ошибке, вы используете поставщика, который несовместим. Основная причина, вероятно, заключается в том, что у вас есть дублирующиеся MySql.Data.MySqlClient поставщики, один загружается из MySql.Data.Entity.EF6 сборки, а другой загружается из MySql.Data.EntityFramework сборки.

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

...
<provider invariantName="MySql.Data.MySqlClient"
    type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.EntityFramework, Version=8.0.22.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d">
  

Согласно документации, ваш раздел entity Framework должен выглядеть следующим образом.

 <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"/>
    <providers>
        <provider invariantName="MySql.Data.MySqlClient"
            type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.EntityFramework"/>
        <provider invariantName="System.Data.SqlClient"
            type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer"/>
    </providers>
</entityFramework>
  

Кроме того, похоже, что ваша фабрика подключений по умолчанию использует неправильную сборку и тип:

 <defaultConnectionFactory 
    type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.Entity.EF6" />
  

Вместо этого следует использовать документацию, показанную System.Data.Entity.Infrastructure.SqlConnectionFactory в сборке EntityFramework:

 <defaultConnectionFactory 
    type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"/>
  

Кроме того, зарегистрируйте DbProviderFactories

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

Обратите внимание, чтобы всегда обновлять номер версии, чтобы он соответствовал номеру в MySql.Data.dll сборка, которую вы используете.

Ответ №3:

Поскольку в сообщении об ошибке указано, что у вас несовместимый соединитель mysql, попробуйте удалить все и создать заново. Вы можете попробовать напрямую из источника @ источник mysql

попробуйте изменить конфигурацию на

 <connectionStrings>
<add name="MyContext" providerName="MySql.Data.MySqlClient"
        connectionString="server=yourserver;port=3306;database=mycontext;uid=root;password=********    "/>
</connectionStrings>
<entityFramework>
<defaultConnectionFactory     type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"/>
<providers>
    <provider invariantName="MySql.Data.MySqlClient"
        type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.EntityFramework"/>
    <provider invariantName="System.Data.SqlClient"
        type="System.Data.Entity.SqlServer.SqlProviderServices,     EntityFramework.SqlServer"/>
</providers>
</entityFramework>
  

после добавления пакета mysql MySql.Data.EntityFramework вы можете добавить из:

  1. менеджер пакетов Install-Package MySql.Data.EntityFramework -Version 8.0.22
  2. командная строка dotnet add package MySql.Data.EntityFramework -Version 8.0.22
  3. в диспетчере пакетов Visual Studio nuget

вы можете продолжить поиск источника mysql, там много полезной информации.