#c# #mysql #entity-framework #visual-studio-2019
#c# #mysql #entity-framework #visual-studio-2019
Вопрос:
Я пытаюсь настроить MySQL
базу данных в dot net
приложении. Для этого я установил его.
- MySQL для Visual Studio 1.2.9
- Connector / NET 8.0.22
- Entity Framework 6 (EF6)
- 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
вы можете добавить из:
- менеджер пакетов
Install-Package MySql.Data.EntityFramework -Version 8.0.22
- командная строка
dotnet add package MySql.Data.EntityFramework -Version 8.0.22
- в диспетчере пакетов Visual Studio nuget
вы можете продолжить поиск источника mysql, там много полезной информации.