Включить Entity Framework 6 для MySql (С#) в WinForms Microsoft Visual Studio 2013
Вчера я знал, что Entity Framework - это еще один метод доступа к базе данных помимо использования Dataset или DataReader, а затем я попытался заставить Entity Framework 6 работать на моем сервере базы данных MySql в MVS 2013.
Я открываю WinForms с .Net FrameWork 4.5.1. (поэтому у меня только App.config, но нет приложения/веб-конфигурации в проекте)
После того, как я установил mysql-installer-community-5.7.3.0-m13.msi и
установить пакет EntityFramework через
Меню TOOLS → Менеджер пакетов библиотеки → Управление пакетами NuGet для Решение... → Онлайн → (Поиск) EntityFramework (остерегайтесь версии этого пакета, и он должен быть версии 6.0.2, если не нажать Обновления → EntityFramework для обновления)
Когда я попытался добавить ADO.NET Entity Data Model через
Щелкните правой кнопкой мыши Project → Add → New Item → ADO.NET Entity Data Model → Создать из базы данных → Новое соединение → Источники данных: → Изменить...- > База данных MySQL → Заполните имя сервера IP-адресом сервера, именем пользователя и паролем → Выберите имя базы данных- > тестовое соединение → OK
Затем генерируется строка Entity Connection → Tick Сохранить настройки подключения сущности в App.Config as → Далее > →
Какую версию Entity Framework вы хотите использовать?
Есть опция Entity Framework 6.0, но вы не можете использовать ее, потому что
"Ваш проект ссылается на последнюю версию Entity Framework; однако поставщик базы данных Entity Framework, совместимый с этим версия не найдена для вашего подключения к данным. Выйдите из этого мастера, установить совместимого поставщика и переустановить проект до выполняя это действие".
Как это решить?
Кстати, если вы устанавливаете Entity Framework версии 5 в Nuget Package, у вас может быть опция Entity Framework 5.0 здесь, и вы можете использовать Entity Framework 5, но не версию 6.
Ответы
Ответ 1
Прежде всего, нам не требуется, чтобы установить сообщество mysql-installer- -5.7.3.0-m13.msi.
- Установите последний mysql-visualstudio-plugin
- Установите последнюю mysql-connector-net
- Новый С#.Net 4.5 Framework WinForms (для 4.0 он должен работать на основе Поддерживает ли Entity Framework 6.NET 4.0?)
- Установите 4 Nuget Packages (следуйте последовательности, если вы установите Mysql.Data.Entities перед EntityFramework, он будет разрешать зависимость и устанавливать EntityFramework 6.0.2, но то, что нам нужно это EntityFramework 6.1.0)
EntityFramework
Mysql.Datap >
Mysql.Data.Entities
Mysql.Web
5.Если у вас tag entityFramework в App.config, прокомментируйте его и вставьте новый тег entityFramework в 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" />
</providers>
</entityFramework>
6.Add ADO.NET Entity Data Model (как указано в вопросе)
7.После Строка соединения Entity Connection генерируется (как указано в вопросе) и установите флажок Сохранить параметры подключения сущности в App.Config, а затем нажмите "Далее"
8.Выберите свой объект и настройки базы данных (таблицы, представления или хранимые процедуры и функции) (у вас нет "какой версии Entity Framework вы хотите использовать?", потому что у меня есть только один Entity Framework 6.0, поэтому прямой пропустить выбор, если мой единственный провайдер действителен)
9.Finish
Поздравляем ^^
Кстати, вам может понадобиться добавить DLL файлы
- MySql.Data.dll
- MySql.Data.Entity.EF6.dll
- MySql.Web.dll
внутри этой папки
C:\Program Files\MySQL\MySQL Connector Net 6.8.3\Assemblies\v4.5 (32-битные окна)
C:\Program Files (x86)\MySQL\MySQL Connector Net 6.8.3\Assemblies\v4.5 (64-битные окна)
в качестве ссылки на проект для дальнейших функций EF6.
Ответ 2
Я следовал инструкциям, данным V-Shy, и имел ту же проблему, что и LaRae White, когда мастер закрыл меня. Я запускаю VS2015 и только что использовал установщик MySql для обновления до MySQL для Visual Studio v1.2.6 и Connector/NET v6.9.8.
Что я в итоге сделал, чтобы заставить его работать, это:
- Удалите все пакеты, которые я ранее установил, чтобы решить эту проблему (EntityFramework, Mysql.Data, Mysql.Data.Entities, Mysql.Web)
- Добавлены следующие ссылки, найденные в C:\Program Files (x86)\MySQL\Connector.NET 6.9\Assemblies\v4.5 вручную: MySql.Data.dll, MySql.Data.Entity.EF6.dll и MySql.Web.dll
Я надеюсь, что это поможет кому-то.
Ответ 3
Я целый день цепляюсь за то, как решить эту проблему, и ничего не помогает.
Видимо, я разобрался с 1 вещами, о которых люди не упоминают.
В свойствах model.edmx имеется целая "Шаблон генерации DDL", по умолчанию он установлен в "SSDLToSQL10.tt(VS)", но для этого необходимо установить "SSDLToMySQL.tt(VS)"
Более того, он также вызывал ошибку:
Запуск преобразования: System.NullReferenceException: ссылка на объект не установлена в экземпляр объекта.
bla bla bla
line 93 c:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\DBGen\SSDLToMySQL.tt
Что приводит меня к официальной ошибке в "MySQL для Visual Studio 1.1.3" , которая будет исправлена в следующей версии 1.1.4, которая пока недоступна.
Однако есть обходное решение:
Перезапишите "MySql.Data.Entity.EF6.dll" в
C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssemblies
по файлу из NET Connector в
C:\Program Files (x86)\MySQL\MySQL Connector Net 6.8.3\Assemblies\v4.5\
Ответ 4
Убедитесь, что ваш DbContext
имеет аннотацию, как показано в документации MySQL:
[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
public partial class MyDbContext : DbContext
{
}
Я все время обнаружил, что первое приложение базы данных ASP.NET MVC позволит мне обновить мой файл EDMX до тех пор, пока я не выберу его из исходного управления на другой машине.
Я надеюсь, что это поможет кому-то, кто не сможет обновить свой EDMX, или обнаружит ошибку при использовании MySQL с Entity Framework 6, поскольку я продолжал сталкиваться с той же ошибкой, пока не добавлю аннотацию.
Ответ 5
У меня была такая же проблема, и я пробовал различные исправления, подобные тем, которые есть здесь, а также некоторые из форумов MySQL и до сих пор не смог обновить EDMX.
Через какое-то время (ужасно долгие часы) мне удалось получить эту вещь, работая с обновлением VS 2013 версии 3,.Net 6.9.4, Mysql для VS 1.2.3 для моего MvcApplication.
Во-первых, я пробовал на совершенно новой машине, все работало с простой установкой VS, за которой следуют соединитель и Mysql для VS.
Затем я также пробовал со старым VS 2012, и он тоже работал.
Я уже написал несколько проектов с EF5 на своей машине и предположил, что старые файлы EF5 могут помешать работе EF6.
Итак, вот что я сделал, но вы должны иметь в виду, что это проблема, связанная с машиной, и что я даю вам список всех вещей, которые я пытался в отчаянии:
-
Удалите все файлы mysql. *. dll в папке C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssemblies
-
Перезаписать MySql.Data.Entity.dll в папке C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\PublicAssemblies с той, что находится в папке Connector
-
Удалите EntityFramework из вашего проекта в консоли Nuget, а затем перейдите на EF 6.0.0: Install-Package EntityFramework -ProjectName YourProject -version 6.0.0
-
Добавьте ссылку на MySql.Data.Entity.EF6 не с Nuget, а напрямую ссылкой на файл (C:\Program Files (x86)\MySQL\MySQL Connector Net 6.9.4\Assemblies\v4.5\MySql.Data.Entity.EF6.dll)
Мой файл app.config выглядит следующим образом
<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" />
</startup>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<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" />
</providers>
</entityFramework>
<connectionStrings>
<!-- your connection string here -->
</connectionStrings>
</configuration>
И ссылки, добавленные в проект, следующие три
- EntityFramework
- EntityFramework.SqlServer
- MySql.Data.Entity.EF6
Возможно, некоторые из этих шагов были бесполезны, но теперь я могу, наконец, обновить свой файл EDMX и, конечно же, создать и запустить веб-проект, а VS не повлияет на удаление библиотек MySql.
Надеюсь, что это поможет.
Ответ 6
У меня была такая же проблема. В моем случае мне пришлось:
- Перестроить проект после добавления пакетов до запуска мастера добавления модели.
- Удалите последнюю версию пакета фреймворков и вернитесь к версии 6.0.0.0.
- НЕ установите Mysql.Data.Entities.EF6 после установки Mysql.Data.Entities!!
-
Измените конфигурационный файл, чтобы только один поставщик MySql.Data.MySqlClient находился внутри провайдеров и должен был включить версию:
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.5.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
</providers>
Ответ 7
У меня есть аналогичная проблема с сообществом VS2013, но мой не WinForm, а ASP.NET MVC. После выполнения всех вышеперечисленных решений и моих проблем все еще есть, но они (особенно Хамед) дали мне некоторые идеи, чтобы исправить это.
Итак, если вы все еще прокрутите сюда, это может дать вам также идею. У меня есть:
- Установленный MySQL Connector NET 6.8.4 (6.9.5, похоже, не работает).
- Leaved MySQL для VS 1.2.3 как есть (нет необходимости устанавливать 1.1.1 с тех пор, как работал 1.2.3).
- Установлен файл MySQL.data Mysql.Data.entities из NuGet.
- Удалены все файлы MySQL.dll из D:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssemblies.
- Сделано, как сказал Хамед.
- Восстановленное решение.
- Добавлена новая модель Entity Model ADO.NET.
Надеюсь на эту помощь.
Ответ 8
После долгих часов работы в течение последних 2 дней мне наконец-то помогло вернуть весь мой код в старый код EF5, удалить ADO.NET Entity Data Model и повторно добавить его БЕЗ выбор сущности framework 6.0 (который был отключен), но выбор 5.0.
Из-за последнего соединителя mysql, плагина Visual Studio и всех других компонентов, которые я установил, как упомянуто выше, visual studio автоматически добавила модель данных сущности Entity Framework 6.0 ADO, игнорируя мой "выбор".
Затем я добавил все ссылки вручную в любом запрошенном ему проекте (EntityFramework, mysql.data, mysql.data.entity.EF6 ver 6.9.6) и наконец.
Ответ 9
Исправление выглядит следующим образом:
- Установить плагин MySQL Visual Studio
- Установите MySQL Connector для .NET.
- Добавить ссылки в проекте из сборщиков MySQLConnector внутри программных файлов.
-
Удалите старый код из App.Config или Web.Config
<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" />
</providers>
</entityFramework>
-
Замените код, приведенный ниже:
<entityFramework>
<defaultConnectionFactory type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.Entity.EF6">
</defaultConnectionFactory>
<providers>
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" />
</providers>
</entityFramework>
-
Восстановите проект и попробуйте добавить новую модель данных Entity.NET ADO
Ответ 10
У меня были проблемы вроде ih303.
Как я его исправил:
-Полученное решение V-SHY
- если нет сообщений об ошибках или что-то в этом роде, мастер просто уходит → выполните следующее решение (которое сработало для меня):
вместо ввода:
<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" />
</providers>
</entityFramework>
измените его на следующее:
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="mssqllocaldb" />
</parameters>
</defaultConnectionFactory>
<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" />
</providers>
</entityFramework>
rebuild → добавить мастер и т.д. → должен работать.
Ответ 11
Мне удалось заставить его работать, удалив ссылки для:
MySql.Data.Entity.EF6
MySql.Data
И вместо этого я установил Nuget
MySql.Data.Entity
Что он сделал, это не только добавление ссылок на фреймворки, удаленные выше, но и внесение некоторых изменений конфигурации в проект. После того, как я установил nuget, я также перестроил проект, чтобы файлы dll были добавлены в каталог bin.
Ответ 12
Для меня это, похоже, имеет отношение к 32-разрядным VS-64-разрядным драйверам баз данных.
По крайней мере, в этот момент я могу переключаться между этой ошибкой и не иметь этой ошибки, меняя мою конфигурацию на x64. Попытка Любой процессор не работает, и попытка x86 не работает.
Я не уверен, где решить, использовать ли 32 или 64-битные драйверы MySQL; установщик утверждает, что устанавливает оба.
(Мне также необходимо добавить один или несколько пакетов NuGet MySql.Data
, MySql.Data.Entity
и MySql.Data.Entities
, а также EntityFramework
.)
Как только модель была добавлена в мой проект, мне удалось переключить проект обратно на x86 без проблем.
Ответ 13
Когда мы добавляем элемент данных ADO.NET Entity Data Model с соединением Oracle, тогда появляется сообщение об ошибке "Ваш проект ссылается на последнюю версию Entity Framework..."
Здесь приведены шаги разрешения:
-
Установите Oracle ODTwithODAC122010 как 32Bit
-
Создайте свой проект в VS2017
-
Измените Active Solution Platform на 32 бит из AnyCPU
-
Открыть Инструменты- > Nuget PackageManager- > Управление пакетами Nuget для решения
-
Записать область обзора "ODP" и установить следующую программу
Oracle. ManagedDataAccess
а также
Oracle.ManagedDataAccess.EntityFramework
6.Открыть инструменты- > Nuget PackageManager- > Консоль диспетчера пакетов
7. Запишите эту конструкцию EntityFramework Install-Package -Version 6.1.1 и введите
8. Запустите Visual Studio для завершения процесса
9.Re-Создать свое приложение
- Добавить новый элемент ADO.NET Entity Data Model
11.Если требуется Добавить новое подключение к Oracle (Источник данных = База данных Oracle (ODP.NET, Управляемый драйвер))
12. Все в порядке.
Примечание. Я хочу, чтобы EF6.1.3 не работал с VS2017 и Oracle ODTwithODAC122010. Но после всего этого процесса я изменил EF как EF6.1.3, он работает
Но я не советую вам.
Ответ 14
Решение, которое сработало для меня, было первым, чтобы выполнить шаги @V-SHY и установить MySql.Data.Entity