Visual Studio 2013 中带有 EF6 的 MySQL 连接器
Posted
技术标签:
【中文标题】Visual Studio 2013 中带有 EF6 的 MySQL 连接器【英文标题】:MySQL Connector with EF6 in Visual Studio 2013 【发布时间】:2014-12-04 12:00:27 【问题描述】:我正在尝试通过 C# .NET Web MVC 应用程序连接到 mysql。
我的问题是,当我尝试根据我的 MySQL 连接添加从数据库生成的 ADO.NET 实体数据模型时,我收到以下错误消息:
您的项目引用了最新版本的实体框架; 但是,实体框架数据库提供程序兼容 无法为您的数据连接找到此版本。 退出此向导,安装兼容的提供程序, 并在执行此操作之前重建您的项目
我正在运行以下软件、升级和附加组件:
Visual Studio 2013 MySQL 服务器 v5.6.21 MySQL For Visual Studio v1.2.3 连接器/NET v6.9.4NuGet 包:
EntityFramework v6.1.1 MySQL.Data v6.9.3 MySQL.Data.Entities v6.8.3.0 SQL.Web v6.9.3我的 web.config,entityFramework 块:
..
</system.webServer>
<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>
<runtime>
..
我查看了我可以在 SO 上找到的所有其他解决方案,通常是通过 google,尝试了所有解决方案,但似乎没有一个解决方案有效或适用于非常不同版本的 Connector/NET 或其他程序需要。
谁能发现我做错了什么?
【问题讨论】:
我建议安装最新的 MySQL for Visual Studio 版本(1.2.3)。看起来您安装的 1.1.1 与安装的 Connector/NET v6.9.4 不兼容,请参阅(表 4.1):dev.mysql.com/doc/connector-net/en/… 您好 - 我刚刚检查了一下,显然我已经有了 MySQL for Visual Studio v1.2.3。不过谢谢! :) 【参考方案1】:现在这不是我自己遇到的问题,但我确实找到了以下可能的解决方案:
-
右键单击解决方案(解决方案资源管理器的顶层)。
为解决方案管理 Nuget 包。
转到已安装选项卡。
对于所有与 EntityFramework 相关的包(MySql.Data、MySql.Data.Entities、MySql.ConnectorNET.Entity 和 MySql.ConnectorNET.Data),选择它们,然后选择“管理”按钮。
为所有项目启用每个包。
我在这里注意到的是他有两个额外的包,你没有提到“MySql.ConnectorNET.Entity”和“MySql.ConnectorNet.Data”。可能是您缺少这些,而它们是使用 Entity Framework 6.1.1 所必需的
(来源:No Entity Framework Provider Found For)
【讨论】:
您好。在您指出之后,我发现我已经安装了 MySQL.ConnectorNET.Entity,现在已经安装了 MySQL.ConnectorNET.Data,但无济于事。我也尝试了可能的解决方案,但似乎没有用。不过谢谢!【参考方案2】:我有一个使用 MySQL 连接器库版本 6.8.3 和 EF6 v6.0.0 的工作项目。我记得这个错误,我想我解决了手动向 app.config 添加一些行。
我列出了我的 app.config 中与 EF6 和 MySQL 配置相关的行,与你的不同,也许对你有帮助:
<configSections>
...
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<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.8.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
</providers>
</entityFramework>
我已经安装了 MySQL Connector Net 6.8.3 和从 MySQL 站点下载的包,并添加了对项目的两个引用:MySql.Data 和 MySql.Data.Entity.EF6,都是 6.8.3 版本(我注意到你是使用此文件的不同版本...)。
我通过 Nuget 将 EF6 (v 6.0.0) 添加到项目中。
不是最新版本,但希望对您有所帮助。
【讨论】:
嗨!我尝试了您的解决方案,但无济于事:(谢谢!【参考方案3】:基本解决方案是重新安装 MySQL 和 VisualStudio包括 Entity 和 .NET。
由于某种原因,我不确定为什么,安装过程会损坏 DLL,或者至少这是我和其他同事的经验。我们的解决方案是尝试以上所有方法均无济于事。所以最后我们尝试重新安装,它成功了。所以试试吧:)
【讨论】:
重新安装成功了,谢谢拉尔斯!下一个寻找的人的快速旁注。重新安装后,您可能会遇到 ADO.NET 对象向导崩溃。这可以通过以下方式解决:“原来是我的项目中的引用必须从扩展选项卡中删除并再次选择。然后我编译了所有内容并使用“数据库中的代码优先”,它工作正常!“来自: forums.mysql.com/read.php?174,606395,618190#msg-618190 至少对我有用。 唉,很不清楚:删除哪些引用? Visual Studio 2014 中的“扩展选项卡”在哪里;从数据库中选择 Code First 而不是“从数据库中选择 EF 设计器”仍然会使向导消失【参考方案4】:我有同样的问题。安装后:
Visual Studio 2013 社区版 适用于 Visual Studio 1.2.3 的 MySQL MySQL 连接器 .NET 6.9.5我不想重新安装Visual Studio,所以经过一些测试,我发现文件夹“C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssemblies " 包含以下文件的旧版本:
MySql.Data.dll MySql.Data.Entity.EF6.dll MySql.Web.dll关闭 Visual Studio 后,我将这些文件替换为“C:\Program Files (x86)\MySQL\MySQL Connector Net 6.9.5\Assemblies\v4.5”中的文件,现在它有效!
注意:将上面子文件夹名称中的 6.9.5 替换为系统中安装的实际版本。
【讨论】:
谢谢!这是我启动新机器时的目标。 谢谢!就我而言,我使用的是 .Net 4.0,所以我从C:\Program Files (x86)\MySQL\MySQL Connector Net 6.9.X\Assemblies\v4.0
获取文件
这是我读过的所有内容中唯一有效的解决方案。非常感谢。
希望这能奏效,但它破坏了 add ado.net 实体数据模型 ui【参考方案5】:
解决方案是将其添加到您尝试添加/修改数据模型的项目的app.config
/ web.config
。
<system.data>
<DbProviderFactories>
<clear />
<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.9.5.0,
Culture=neutral,
PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
</system.data>
根据您的连接器更改版本。
【讨论】:
【参考方案6】:如果您需要将 EntityFramework 与 mysql 数据库一起使用,您只需使用包管理器控制台安装旧版本的 EntityFramework,如 v 5.0。编写安装包 EntityFramework -Version 5.0.0。 享受。 https://www.nuget.org/packages/EntityFramework/5.0.0
【讨论】:
【参考方案7】:只需添加到 web.config:
<system.data>
<DbProviderFactories>
<clear />
<add name="MySQL Data Provider"
invariant="MySql.Data.MySqlClient"
description=".Net Framework Data Provider for MySQL"
type="MySql.Data.MySqlClient.MySqlClientFactory,
MySql.Data" />
</DbProviderFactories>
</system.data>
在尝试再次添加从数据库生成的 ADO.NET 实体数据模型之前,不要忘记重建解决方案。
【讨论】:
【参考方案8】:首先,重新安装 vs 1.2.3,将以下引用添加到您的项目或检查它的版本:
MySql.Data.dll
MySql.Data.Entity.EF6.dll
MySql.Web.dll
移除 App.config 或 Web.config 中的默认 entityFramework 标签 重建你的项目,你可以添加ADO.NET实体数据模型
【讨论】:
【参考方案9】:这对我有用,无需重新安装 Visual Studio 或其他任何东西。
已安装最新的 MySQL Visual Studio 插件和 MySQL 连接器网络 删除 App.config 或 Web.config 中的 entityFramework 标签及其所有子标签。 将其替换为以下代码:<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" />
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
添加对项目的 MySql.Data.dll、MySql.Data.Entity.EF6.dll 和 MySql.Web.dll(如果不是 WPF 应用程序)引用。
重建项目,然后添加 ado.net 模型。
注意:确保只删除 entityFramework 标记及其子标记,并将其替换为上面的片段。如果您删除任何“额外”标签,您的项目可能会遇到更大的问题,就像我一样。 X)
【讨论】:
【参考方案10】:我使用的是 Visual Studio 2013 社区。想在 MySQL db 上执行 Code First。我遇到了同样的问题“您的项目引用了最新版本的实体框架;...” 解决我的问题的是下面给出的简单步骤。
-
添加项目后,使用nuget控制台添加EntityFramework6.1.3,通过install-package EntityFramework
用户控制台通过 MySQL.Data.Entity 添加 MySQL 引用
打开您的 Web.config 或 App.config 以更改 entityframework 和 system.data 部分,如下所示
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<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.9.7.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d">
</provider>
</providers>
</entityFramework>
<system.data>
<DbProviderFactories>
<remove invariant="MySql.Data.MySqlClient" />
<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.9.7.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
</system.data>
此时请确保重新构建项目。 (这是必须的)
现在添加 ADO 实体模型并选择 MySQL 即可。
顺便说一下,我使用的插件是 M4VS 1.2.3 和 MySQL .NET Connector 6.9.7
【讨论】:
【参考方案11】:很简单,我使用 Nuget 来引用 MySQL.dll(等),它自动引用了 .net 4.0 dll。我刚刚将引用更改为 4.5 并且它起作用了。
【讨论】:
【参考方案12】:在 nuget 命令行中执行
update-package -reinstall -ignoreDependencies
并重建解决方案 这个工作还是我
【讨论】:
【参考方案13】:我也遇到了同样的问题。幸运的是,我修好了。 MySql.Data.dll 或 MySql.Data.Entity.EF6.dll 与 EF 6.1 up 版本不兼容。我做了什么,我通过这个命令在 nuget 控制台中安装了 EF 版本 6.0.0.0 -> install-package entityframework -version 6.0.0.0 并解决了这个问题。
【讨论】:
【参考方案14】:我添加了这个为我解决了这个问题:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
【讨论】:
【参考方案15】:2018年还有问题……
DB-first 场景:对于 Visual Studio 2017 社区版,我找到了可行的组合:
适用于 Visual Studio 1.2.8 的 MySQL MySQL 连接器 .NET 6.9.9 EntityFramework 5.0.0(我尝试了 v6.x 的不同组合,但没有成功)我可以使用官方文档运行的 Code-First 场景 https://dev.mysql.com/doc/connector-net/en/connector-net-entityframework60.html 使用最新的连接器 v.8.0.11 和 EF6。
【讨论】:
以上是关于Visual Studio 2013 中带有 EF6 的 MySQL 连接器的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SQLite 和 Visual Studio 2013 中使用 EF
在 Mvc 5、EF6、Visual Studio 2013 中使用存储库的脚手架控制器
visual studio 2013 error: Page '312e8a59-2712-48a1-863e-0ef4e67961fc' not found.
Visual Studio 2010 中带有 plsql 的 C# [关闭]