2013-02-28 142 views
29

我试图使用实体框架与MySQL和我得到上述错误。我有最新的MySQL连接器安装。没有实体框架提供发现“MySql.Data.MySqlClient” ADO.NET提供

完整的错误读取:

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”部分进行注册。

一些其他职位(example)建议增加提供给system.DataDbProviderFactories部分是这样的:

<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> 

回答

0

没关系。我注意到我安装了EF 6。我删除它,并尝试EF 5(而NuGet说是最新的稳定版本),它开始工作。

不过,一个更有用的错误消息,本来不错!

+0

我试图做同样的事情,并不能得到正确的app.config使用... .Net 4.5和EF 5 ..在你的''部分中,你仍然有''指向默认的'Lo​​calDbCon nectionFactory'。你在哪里指向'MySql' db? – 2013-05-07 02:43:43

+16

我不知道如何卸载EF6和使用其他东西可以标记为这个问题的正确答案。 – spryce 2013-11-01 03:17:30

+0

@spryce:这是我的问题和我的答案。它使它工作。当时EF 5是稳定的版本,但不知何故,我结束了EF 6。 – 2013-11-01 13:26:51

0

可能只是提供MySQL的安装在机器的配置(例如,通过.NET连接器安装程序? 也是默认连接工厂应该像“MySql.Data.MySqlClient.MySqlClientFactory,MySql.Data,版本= 6.7.4.0文化=中性公钥= c5687fc88969c44d”我猜...

25

您需要创建在配置本节(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

+0

添加版本号后为我工作。 + 1ed – 2014-08-28 14:05:56

+0

现在支持EF6。我正在使用连接器6.9.6,并在您的代码中使用MySql.Data.Entity.EF6替换MySql.Data.Entity。并添加参考。 – elcool 2015-03-26 05:04:31

+0

添加这个对我来说是个诀窍。谢谢 – 2015-10-27 08:48:41

4

只是增加版本的摘要(因为我看到你正在试图6.2中,这是太旧)

  • 对于EF4,可以使用连接器/ NET 6.6.x(当前GA是6.6.6)
  • 对于EF5,使用连接器/ NET 6.7.x(电流GA是6.7.4)或连接器/ NET 6.8.x(电流GA是6.8.3)。
  • 对于EF6,使用连接器/ NET 6.8.x(电流GA是6.8.3)。
+0

这个问题差不多一岁了,所以我不知道它当时已经太旧了,但是对于有帮助的总结还是+1。 – 2014-02-18 02:00:19

29
在EF5以下

,一切ok。在EF6中使用 ,则需要使用mysql连接器6.8。X,并添加DbConfigurationTypeAttribute到你的DbContext:

[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))] 
public class DemoContext : DbContext{} 

这MySqlEFConfiguration是MySql.Data.Entity.EF6.dll在6.8.x.试试!

+3

它的工作原理,但作为一个解决方案很糟糕,因为然后代码将取决于MySQL而不是仅仅配置... – mycroes 2014-08-11 09:38:30

+3

添加属性绝对解决了我的问题,但它是一个痛苦有代码中的MySQL依赖项。更好的方法是按如下方式添加此配置: 2016-04-22 15:12:19

+0

我有正确的配置,但开始看到此错误。我开始根据变化改变我的配置,但没有任何工作。然后我关闭了VS.NET并重新打开了解决方案,并且一切都重新开始。 – Nicholas 2016-12-12 21:53:21

4

我已经从EntityFramework 5.0更新到6.1和MySQL连接器6.8.3,只需添加属性即可重新开始。在添加属性之前,所有的东西都可以很好地编译,但在运行时崩溃

[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))] 
public class DemoContext : DbContext{} 
+0

这是我的答案。希望这会得到更多的赞扬,我们将会有一个更接受的答案。谢谢! – 2015-02-26 04:22:23

1

我试过配置字符串和设置的每个不同的组合,但我终于想通了。我的解决方案在一个项目中有源代码并在另一个项目中进行测试我使用的是Entity Framework 6.1.1,并为Visual Studio 1.2.3安装了MySql Connector 6.8.3和MySql。

问题是我有NuGet管理包,但只有他们包括在主项目。解决的办法是

  1. 的解决方案右键单击(Solution Explorer中的顶级)
  2. 管理的NuGet包解决方案
  3. 转到安装选项卡
  4. 对于所有的EntityFramework相关的包(MySQL的.Data,MySql.Data.Entities,MySql.ConnectorNET.Entity和MySql.ConnectorNET.Data),选择它们,然后选择“管理”按钮。
  5. 为所有项目启用每个包。
1

以供将来参考,下面是使用MySQL的连接器/网络与EF 6官方指南,其中包括所有必要的步骤(组件,CONFIGS,...等): Chapter 10 EF 6 Support

1

在我的情况下,这是一个缺少的参考。当您升级到的EntityFramework 6,您需要将引用添加到组装

System.Data.Entity的

我想这是因为MySql.Data.Entity.EF6从一堆东西继承在这个程序集中,它不适用于以前版本的EF。

当你的app.config很好,你所有的引用看起来都很好时,这是一个值得检查的解决方案。

3

我刚刚在使用MySQL,ADO.NET(数据库优先)和EF6配置Visual Studio Professional 2017环境时遇到了同样的情况。

经过每个连接器/ NET可用的地狱后,我得到它与连接器/ NET v6.9.10和遵循以下步骤。

  1. 如果已安装,请卸载/删除“Connector/NET”和“Visual Studio的MySQL”。

  2. 安装“MySQL for Visual Studio”v2.0.5 CTP(MySQL for Visual Studio)。 注意:在Connector/NET之前安装MySQL for Visual Studio。

  3. 安装“Connector/NET”v6.9.10(Connector/Net)。 https://i.stack.imgur.com/XOT1I.jpg注意:我尝试使用Connector/NET v6.8,v6.10和v8第一,但他们都没有工作Here you can find all Connector Versions and Compatibilities with Visual Studio IDEs,但到目前为止这个列表是不准确的。

  4. 通过NuGet下载并安装“EntityFramework”v6.2.0。

  5. 添加引用到C:\Program Files (x86)\MySQL\Connector.NET 6.9.10\Assemblies\v4.5\MySql.Data.dllC:\Program Files (x86)\MySQL\Connector.NET 6.9.10\Assemblies\v4.5\MySql.Data.Entity.EF6.dll

  6. 下实体框架的提供程序添加MySQL EF6提供商的信息内的App.config如下:

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

  • 重建项目。
  • 就是这样。 VS2017已准备好迎接我。希望这对所有人都有用,就像今天这样。

    参考

    1. Can't Create Entity Data Model - using MySql and EF6

    2. No Entity Framework provider found for 'MySql.Data.MySqlClient' ADO.NET provider

    +0

    评论永远不应该在回答部分。 – Billa 2017-11-26 16:56:26

    +0

    尽管这个链接可能回答这个问题,但最好在这里包含答案的重要部分,并提供供参考的链接。如果链接页面更改,则仅链接答案可能会失效。 - [来自评论](/ review/low-quality-posts/18067511) – matteodv 2017-11-26 16:59:02

    相关问题