Ответ 1
Nevermind. Я заметил, что у меня установлен EF 6. Я удалил его и вместо этого попробовал EF 5 (что NuGet говорит о последней стабильной версии), и он начал работать.
Тем не менее, более полезное сообщение об ошибке было бы приятным!
Я пытаюсь использовать Entity Framework с MySQL, и я получаю вышеуказанную ошибку. У меня установлен последний соединитель MySQL.
Полная ошибка:
No Entity Framework provider found for 'MySql.Data.MySqlClient' ADO.NET provider. Make sure the provider is registered in the 'entityFramework' section of the application config file.
Однако я не могу найти ничего, что подсказывает, как вы зарегистрируете его в разделе "entityFramework".
Некоторые другие сообщения (пример) предлагают добавить поставщика в раздел system.Data
DbProviderFactories
следующим образом:
<DbProviderFactories>
<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.2.3.0, Culture=neutral,
PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
Но это не работает, потому что он утверждает, что имя invariant
дублируется. И, если я действительно перейду через System.Data.Common.DbProviderFactories
, я вижу, что последний из них - поставщик MySQL:
MySQL Data Provider
.Net Framework Data Provider for MySQL
MySql.Data.MySqlClient
MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.6.5.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d
Итак, провайдер есть, но EF отказывается его использовать. Любые идеи?
Моя полная конфигурация выглядит следующим образом:
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<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,
Version=6.2.3.0, Culture=neutral,
PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>-->
</system.data>
<connectionStrings>
<add name="myContext" connectionString="server=****;User Id=****;password=****;Persist Security Info=True;database=myDb"
providerName="MySql.Data.MySqlClient" />
</connectionStrings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v11.0" />
</parameters>
</defaultConnectionFactory>
</entityFramework>
</configuration>
Nevermind. Я заметил, что у меня установлен EF 6. Я удалил его и вместо этого попробовал EF 5 (что NuGet говорит о последней стабильной версии), и он начал работать.
Тем не менее, более полезное сообщение об ошибке было бы приятным!
в EF5 или меньше, все нормально. в EF6 вам нужно использовать mysql connector 6.8.x и добавить DbConfigurationTypeAttribute к вам DbContext:
[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
public class DemoContext : DbContext{}
который MySqlEFConfiguration находится в MySql.Data.Entity.EF6.dll в 6.8.x. Попробуйте!
Вам нужно создать этот раздел в config (EF 5):
<entityFramework>
<!-- ... -->
<providers>
<provider invariantName="MySql.Data.MySqlClient"
type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity" />
</providers>
</entityFramework>
Обновление: Используйте это определение для EF 6:
<entityFramework>
<!-- ... -->
<providers>
<provider invariantName="MySql.Data.MySqlClient"
type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" />
</providers>
</entityFramework>
Благодаря elcool.
Просто добавив сводку версий (поскольку я видел, что вы пытаетесь использовать 6.2, который слишком старый)
Я обновил с EntityFramework 5.0 до 6.1 и соединитель MySQL 6.8.3 и только должен был добавить атрибут, чтобы снова начать работу. Перед добавлением атрибута все будет компилироваться отлично, но сбой во время выполнения.
[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
public class DemoContext : DbContext{}
У меня была такая же ситуация при настройке среды Visual Studio Professional 2017 с MySQL, ADO.NET(Database First) и EF6.
Пройдя ад с каждым доступным коннектором /NET, я получил его для работы с Connector/NET v6.9.10 и выполнил следующие шаги.
Удалите/удалите "Connector/NET" и "MySQL для Visual Studio", если они установлены.
Установите "MySQL для Visual Studio" v2.0.5 CTP (MySQL для Visual Studio). Примечание. Установите MySQL для Visual Studio до Connector/NET.
Установите "Connector/NET" v6.9.10 (Коннектор/Сеть). https://i.stack.imgur.com/XOT1I.jpg Примечание. Сначала я попытался использовать Connector/NET v6.8, v6.10 и v8, но ни один из них не работал Здесь вы можете найти все версии совместимости и совместимости с IDE Visual Studio, но пока этот список неточен.
Загрузите и установите "EntityFramework" v6.2.0 через NuGet.
Добавьте ссылки на C:\Program Files (x86)\MySQL\Connector.NET 6.9.10\Assemblies\v4.5\MySql.Data.dll
а также
C:\Program Files (x86)\MySQL\Connector.NET 6.9.10\Assemblies\v4.5\MySql.Data.Entity.EF6.dll
.
Добавьте информацию о поставщике MySQL EF6 внутри App.config для поставщиков инфраструктуры сущностей:
<entityFramework>
<providers>
<provider invariantName="MySql.Data.MySqlClient"
type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" />
</providers>
</entityFramework>
Я пробовал каждую комбинацию строк и настроек config, но я, наконец, понял это. Мое решение имеет исходный код в одном проекте и тесты в другом. Я использовал Entity Framework 6.1.1 и установил MySql Connector 6.8.3 и MySql для Visual Studio 1.2.3.
Проблема заключалась в том, что я управлял пакетами NuGet, но только включил их в основной проект. Решение заключалось в
В дальнейшем обратитесь к официальному руководству по использованию MySQL Connector/Net с EF 6, который включает в себя все необходимые шаги (сборки, конфиги и т.д.): Глава 10 Поддержка EF 6
Установите последнюю версию из nuget https://www.nuget.org/packages/MySql.Data.Entity/
В моем случае это была недостающая ссылка. Когда вы обновляетесь до EntityFramework 6, вам нужно добавить ссылку на сборку
System.Data.Entity
Я думаю, потому что MySql.Data.Entity.EF6 наследует от кучу вещей в этой сборке, что он не для предыдущей версии EF.
Когда ваш app.config хорош, и все ваши ссылки кажутся прекрасными, это решение стоит проверить.
Может ли только поставщик MySql установлен в machine-config (например, установщик коннектора .net? Также соединение по умолчанию factory должно быть чем-то вроде "MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version = 6.7.4.0, Culture = neutral, PublicKeyToken = c5687fc88969c44d" Я думаю...