不能使用entity framework6的MySQL连接

我试图使用entity framework6与MySQL。

我没有为Visual Studio 1.1.1和MySQL .Net连接器6.8.3安装MySQL插件。

问题是当我尝试创build一个新的ADO.NET实体模型时,我无法selectMySQL作为连接。

在这里输入图像描述

但是,如果我从Visual Studio中的连接工具创build连接,我可以看到MySQL

在这里输入图像描述

这意味着当前安装的版本与entity framework6不兼容。在安装最新的连接器和插件后,怎么可能呢? 还有什么要做的吗?

谢谢

编辑

我没有安装默认的连接器,我做了全新安装的MySQL,然后我安装了6.8.3和Visual Studio的插件。

然后我可以看到我为我的实体模型做的连接,但是当我要select实体版本时,我得到这个消息。

在这里输入图像描述

最新的编辑

该错误已被修复。

克里斯的评论:

你现在可以在不编辑任何文件或做怪事的情况下完成所有工作。 使用MySQL for Windows安装程序,并包含Visual Studio支持和最新的Connector.Net。 一定要在安装后更新,你会得到最新的(1.2.5和6.9.8)。 使用NuGet安装EntityFramework,MySql.Data和MySql.Data.Entity。 最后,通过添加Ado.Net实体模型,构build并享受代码优先的逆向工程优势。

原始答案

我发现这是来自MySQL的一个错误。

这是解释工作周期的链接。

在VS 2013安装的机器上,VS插件(1.1.3 GA)和Connector / Net

在执行这些步骤之前closures所有VS实例。

在Windows资源pipe理器窗口中,转至此path或您安装Connector / net二进制文件的位置

C:\ Program Files(x86)\ MySQL \ MySQL Connector Net 6.8.3 \ Assemblies \ v4.5 \

复制文件:

MySql.Data.Entity.EF6.dll

并将其粘贴到此文件夹

C:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ Common7 \ IDE \ PrivateAssemblies

如果它要求你覆盖它,请这样做。

您需要pipe理员权限才能覆盖文件。

然后,您可以再次尝试为您的模型生成脚本。

安装VS插件的1.1.3版本是很重要的,因为这个解决方法就是这样的。

不幸的是,它不适合我,所以我降级到entity framework5,直到他们解决这个问题。

编辑

最后,它现在起作用了。

我不得不添加以下3个DLL:

  • C:\ Program Files(x86)\ MySQL \ MySQL Connector Net 6.8.3 \ Assemblies \ v4.5 \ MySql.Data.dll
  • C:\ Program Files(x86)\ MySQL \ MySQL Connector Net 6.8.3 \ Assemblies \ v4.5 \ MySql.Data.Entity.EF6.dll
  • C:\ Program Files(x86)\ MySQL \ MySQL Connector Net 6.8.3 \ Assemblies \ v4.5 \ MySql.Web.dll

然后,我将Webconfiguration中的EntityFramework部分更改为:

<entityFramework codeConfigurationType="MySql.Data.Entity.MySqlEFConfiguration, MySql.Data.Entity.EF6"> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> <providers> <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" /> </providers> </entityFramework> 

不要忘了重build ,你应该能够用MySQL创build一个entity framework模型。

重要

确保你已经为visual studio 1.1.3和MySQL连接器.net 6.8.3安装了MySQL

解! 2017年

安装Nuget包装:

 Install-Package EntityFramework Install-Package MySql.Data.Entity -Version 6.9.9 

安装MySQL for Visual Studio 1.2.6 – https://dev.mysql.com/downloads/windows/visualstudio/

Web.Config中的更改

 <EntityFramework> 

至:

 <EntityFramework codeConfigurationType = "MySql.Data.Entity.MySqlEFConfiguration, MySql.Data.Entity.EF6"> 

添加(**您的信息**):

 <connectionStrings> <add name="**YourContextName**" connectionString="server=**xxx.xxx.xxx.xxx**;port=3306;user id=**your user**;password=**your password**;database=**your database**" providerName="MySql.Data.MySqlClient" /></connectionStrings> 

重新启动Visual Studio

我的设置:
– Microsoft Visual Studio Community 2015
– DotNet框架4.5.2
– Asp.Net MVC 5.2.3.0
– MySql Server 5.6

不知道这是否仍然是一个问题,你们,但是上述解决scheme都不适合我…直到我find这个:

http://www.microsoft.com/en-us/download/details.aspx?id=40762

在应用补丁(VS2013和VS2012)后,我得到了VS2013与MySql的EF6的完美结合。

PS。 已安装的软件包版本(来自NuGet):
EntityFramework – 6.1.3(03/10/2015)
MySqlData – 6.9.6(02/24/2015)
MySql.Data.Entity – 6.9.6(02/24/2015)
MySql.Web – 6.9.6(02/24/2015)

NuGet做的工作正确,并相应地更新Web.Config,用任何需要填充“entityFramework”部分。

对于VS2013,它只是从“不工作”到“function齐全”。 对于VS2012,它可以使用“Code First from Database”,这在应用补丁之前是不可用的。

我希望在10天前我已经find了这个,所以希望这可能仍然有一些帮助。

对于我重新安装MySQL并使用已安装的连接器版本作为Visual Studio工作的参考!

脚步:

  1. 用最新的稳定的MySQL连接器重新安装MySQL工具。
  2. 在Visual Studio中添加这3个文件作为参考:

  3. MySql.Data.dll

  4. MySql.Data.Entity.EF6.dll
  5. MySql.Web.dll

  6. 从下面的Web.config中修改

      <providers> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> </providers> 

至:

  <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" /> </providers> 

确保您的连接用户名/密码/数据库名称正确,否则Visual Studio可能会崩溃。 (发生在我身上)

2015-11-07更新

错误是固定的,你现在可以在不编辑任何文件甚至在NuGet之外引用程序集的情况下完成所有工作。 你只需要安装正确的东西,并添加正确的NuGet包。 就是这样:

使用MySQL for Windows安装程序,并包含Visual Studio支持和最新的Connector.Net。 一定要在安装后更新,你会得到最新的(1.2.5和6.9.8)。

然后,使用NuGet安装EntityFramework,MySql.Data和MySql.Data.Entity。

最后,通过添加Ado.Net实体模型来构build并享受代码优先的逆向工程优势。

我发现这在mySQL Bucktracker上

尝试以下解决方法….

在MySQL数据库上运行以下命令,然后尝试这个工作。

设置全局optimizer_switch ='derived_merge = off'

我还添加了以下程序集:

  • EF6作为Nuget包
  • MySQL.Data
  • MySql.Data.Entity.EF6.dll
  • MySQL.Web(不确定是否真的需要)

对于使用多项目解决scheme的每个人,仅供参考,如果由于查找/加载MySql EF6提供程序的问题而无法运行GUI项目,如:

找不到名称为“MySql.Data。(…)”的ADO.NET提供程序的entity framework提供程序。 确保提供程序在应用程序configuration文件的“entityFramework”部分中注册。 有关更多信息,请参阅http://go.microsoft.com/fwlink/?LinkId=260882

请看这个问题 。

虽然是关于SqlServer的问题,但问题可能是相同的:如果只有一个项目处理数据库操作,那么很可能是您将Nuget引用添加到MySql.DataMySql.Data.EntityEntityFramework到该项目。 由于代码直接使用MySql.DataEntityFramework ,因此构build过程足够智能,可将其复制到输出文件夹,并将其第二次复制到GUI项目的输出文件夹中。

但是,由于MySql.Data.Entity仅由app.configweb.config 文本文件引用,所以构build过程认为不需要此引用( 代码不使用它!)并将其剥离,而您在GUI项目输出目录中不会看到MySql.Data.Entity.EF6.dll ,这导致GUI项目无法find该提供程序。

所以 – 两个选项 – 确保将东西作为构build过程的一部分(即构build前/构build事件,部署包构build器,CI任务,人工任务等)的一部分复制到该构件中,或者直接引用构件DB / EF6项目。