Я использую "Visual Studio 2017 Professional". Я не могу получить проект, чтобы признать, что MySQL является доступным вариантом БД. MySQL не отображается в списке возможных подключений при создании новой модели. Я знаю, что есть тонны вопросов SO и других веб-страниц на эту тему, потому что я пробовал много предложений. Каждый из них является тонким, отличным по причине и решению. Ни одно из решений, похоже, не работает для меня.
Я пробовал следующее с VS 2017 и 2015 с теми же результатами. У меня есть более старые версии VS, но, похоже, не стоило идти дальше. Я также попытался установить последнюю и более старую версию MySQL как с "установщиком сообщества", так и с автономным msi, когда это необходимо. Я вернулся к "последней" версии MySQL версии 6.10.
Для начала эта сага началась на прошлой неделе, когда я заметил, что nuget имеет доступные обновления пакетов MySQL. Я применил их, а затем пошел обновлять установленные компоненты MySQL с помощью установщика сообщества. Изменения nuget действительно применимы. Установщик сообщества не смог удалить MySQL для VS. Системный установщик не смог его удалить. Перезагрузка и круговое движение ничего не сделали.
По рекомендации наших локальных специалистов по технической поддержке я использовал сторонний деинсталлятор, который оказался более агрессивным, чем мы предполагали. Кажется, он случайно удалился через реестр, стирая все, что он нашел. Короче говоря, я закончил работу с моей машиной. Итак, у меня есть новые окна.
Учитывая новую платформу Win10, я установил различные вещи, которые я обычно использую, включая версии VS, которые я обычно использую. Я установил последний установщик MySQL MySQL. Я выполнил "обычную" установку MySQL, потому что мне не нужен сервер на этом устройстве или в сети или много чего.
Я закончил базовую переустановку, а затем перезагрузился, чтобы быть уверенным. Я начал VS 2017 и создал новое веб-приложение с последней доступной версией.Net(4.6.1). Я применил nuget обновления и добавил EntityFramework и MySQL.Data. Затем я попытался создать новую модель "code first".
Я могу дойти до того момента, когда меня попросят создать соединение. Когда я нажимаю кнопку, список доступных поставщиков БД показывает только MS SQL.
Я видел статьи, которые говорят, чтобы добавить строки в Web.config
и я видел документы MySQL.Net Connector, которые говорят то же самое. Я могу видеть записи MySQL в Web.config
но они не отображаются при создании соединения.
Странность заключается в том, что я могу перейти в Tools → Connect to Database
и посмотреть КАЖДЫЙ тип БД, который моя машина знает о включении MySQL. Я могу создать строку подключения, и она работает. Я вижу БД в "Server Explorer", но это не делает его доступным для кода.
Хорошо, я снова и снова следовал вышеуказанным шагам, включая понижение версии EntityFramework, а также версию MySQL.
Моя последняя попытка заставила меня вернуться к последней версии VS и MySQL. Соответствующий (я думаю) раздел файла Web.config
следует за ним. Обратите внимание на defaultConnectionFactory
запись LocalDbConnectionFactory
. Я изменил это на SqlConnectionFactory
но это не изменило ситуацию. Я также изменил порядок поставщиков и порядок основных блоков.
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="mssqllocaldb" />
</parameters>
</defaultConnectionFactory>
<providers>
<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.Entity.EF6, Version=6.10.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d">
</provider>
</providers>
</entityFramework>
<system.data>
<DbProviderFactories>
<remove invariant="MySql.Data.MySqlClient" />
<add description=".Net Framework Data Provider for MySQL" invariant="MySql.Data.MySqlClient"
name="MySQL Data Provider"
type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.10.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
</system.data>
редактировать
Мое настоящее впечатление заключается в том, что VS 2017 - это непригодный беспорядок, замаскированный как выпущенный, продаваемый продукт. Я вернулся к 2015 году.
Я подошел ближе к тому, чтобы это работало в 2015 году. У меня есть последние элементы MySQL для VS и.Net. Я снизил пакет Euget EF до 6.0 и пакеты MySql до 6.8.8.
В, что я сейчас называю "добрыми старыми днями", я мог бы добавить новую модель в проект MVC, выбрав папку "Модели"; выбор "Добавить новый элемент"; выбор модели ADO.Net; выберите вариант подключения (MySQL); введите информацию о подключении; выберите DB First или Code First и дождитесь окончания забастовки.
Теперь я должен сначала перейти в Tools → Connect to Database
и создать соединение с MySql DB. Если я этого не сделаю, позже я не увижу MySQL в списке возможных подключений. Затем я очищаю и строю проект. Затем я попытаюсь создать модель, как указано выше. Noe Я могу видеть вариант подключения MySQL, и я могу ввести кредиты DB и проверить соединение.
Следующим шагом будет выбор DB First или Code First. В любом случае нажатие кнопки "Следующий" мигает пустым всплывающим окном, которое затем исчезает. Ошибок не отображается, и соединение не производится.
Это никогда не было так тяжело в прошлом.
На данный момент я пробовал много разных версий MySQL и EF в 2015 и 2017 годах. Если есть волшебная комбинация, пожалуйста, скажите мне.
Я боролся с этим боем две недели. Я НАКОНЕЦ нашел комбинацию версий, которая работает для меня. Следующее было применено к первозданному перерисовке моего рабочего стола Win10 две недели назад. Все патчи были применены к системному программному обеспечению, прежде чем начать работать с MySql.
Только сегодня утром я перечитываю сообщение в этой теме (MySql Forums): https://forums.mysql.com/read.php?174,659102,660369#msg-660369
Я думал, что раньше я пробовал эти предложения, но я, должно быть, испортил одну из версий. Я думаю, что базовая стратегия плаката звучит. В моем случае я удалил все локальные части MySql и установщик.
Я загрузил MySQL для Visual Studio - последнюю версию разработки (2.0.5 msi на момент написания этой статьи) и установил это.
Я нашел OLD-версии.Net Connector и установил 6.9.11
В VS 2017 я создал фиктивный проект, используя.Net 4.6.1.
Я применил ожидающие обновления VS.
Я построил проект.
Я пошел в "Project → Manage Nuget Packages" и установил/понизил рейтинг EntityFramework до 6.0.
Я установил MySql.Data, MySql.Data.Entity и MySql.Web все в версии 6.9.11
Я очистил и построил проект, а затем попытался добавить новую модель "Code First" из базы данных MySql... ЭТО РАБОТАЛО!
Спасибо 7 Ридс за возвращение с ответом. Это привело меня к работе, хотя я сделал это немного по-другому.
В VS 2017 для подключения к MySQL 5.6:
Установите MySql.Data.Entity(6.10.7)
Также будут установлены необходимые версии пакетов Nuget MySql.Data(6.10.7), EntityFramework (6.1.3) и BouncyCastle (1.8.3.1).
Пакет MySql.Data.Entity говорит, что это зависит от Google.Protobuf, но он не установил его и работает нормально для меня.
В моем проекте добавлены ссылки на BouncyCastle.Crypto(1.8.3.0), EntityFramework (6.0.0.0), MySQL.Data(6.10.7.0) и MySql.Data.Entity.EF6 (6.10.7.0).
Закрыть Визуальная студия
Add New Item
> ADO.NET Entity Data Model
> Теперь вы в мастереEF Designer from database
New Connection...
Change...
для "Источник данных".MySQL Database
в качестве "источника данных".NET Framework Data Provider for MySQL
Для потомков, вот app.config для моего приложения WPF:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --></configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v13.0" />
</parameters>
</defaultConnectionFactory>
<providers>
<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.Entity.EF6, Version=6.10.7.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</providers>
</entityFramework>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.10.7.0" newVersion="6.10.7.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<connectionStrings>
<add name="MyDB" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=MySql.Data.MySqlClient;provider connection string="server=my.example.com;user id=NotMyRealUserID;password=NotMyRealPassword;persistsecurityinfo=True;database=MyDatabase"" providerName="System.Data.EntityClient" />
</connectionStrings>
</configuration>
Я не уверен, что это создало, но у меня есть "Пользовательская переменная" в моих "Переменных среды" с именем MYSQLCONNECTOR_ASSEMBLIESPATH
со значением C:\Program Files (x86)\MySQL\MySQL Connector Net 6.10.7\Assemblies\v4.5.2