我使用的是Visual Studio 2017 Community Edition,并安装了MySQL Connector v.8.0.11。如果我将MySQL Connector版本和Entity Framework降级到v5,则一切正常,但是如果将连接器和实体框架更新到版本6.*之后,我遇到了上述问题。
我自己努力了三天之后,终于找到了问题所在...
所以,你必须从NuGet packages下载的MySql.Data和MySql.Data.Entity版本与你需要下载的MySql Connector/NET版本是直接相关的。
当你查看最新版本的MySql.Data.Entity时,发现它的版本是6.10.7。这意味着如果你下载了Connector/NET 8,则会出现版本不兼容的情况,导致ADO.Net数据实体向导关闭。
下载以下内容,然后就行了:
MySql for visual studio
MySql Connector/NET v6.10.7
NuGet软件包:
Entityframework v6.1.3
MySql.Data v6.10.7
MySql.Data.Entity v6.10.7
<entityFramework>
<defaultConnectionFactory type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.EntityFramework, Version=8.0.11.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
<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.EntityFramework, Version=8.0.11.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"/>
</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=8.0.11.0, Culture=neutral, PublicKeyToken=C5687FC88969C44D" />
</DbProviderFactories>
</system.data>
我也参考了以下内容:
MySQL.Data、MySQL.Entity和MySQL.Web
。如果我使用6.9.11之后的任何版本,那么我就会遇到您提到的行为。-第一步-
使用 mySql 安装程序: https://dev.mysql.com/downloads/installer/
下载
1 - mySql 路由器
2 - Connector/ODBC
3 - Connector/C++
4 - Connector/Net
5 - MySQl 服务器
全部,确切地说是版本: 8.0.12
然后进入visual studio > 管理 nugget 包 > 浏览(选项卡)
(并安装)
1 - entityFramework -> 版本 6
2 - mysql.data -> 版本 8.0.12
3 - mysql.data.entity -> 版本 6
4 - mysql.data.entityFramework -> 版本 8.0.12
然后进入visual studio > 管理 nugget 包 > 更新(选项卡)
将 Google.protoBuf 更新到版本 3.6.0
-第二步-
右键单击您的项目 > 添加新项 > 数据(左侧导航栏)> Ado.net数据模型
连接对话框将出现,使用您的Mysql(版本8.0.12)凭据创建一个新连接。
(检查输入:在connectionString中包含敏感数据..)
您会收到一个错误!这是因为预配置的MySqlProviderServices随版本8.0.11一起提供,您需要在App.config文件中更改它(下一步)。
问题是:当您查看最新版本的MySql.Data.Entity时,它是6.10.7,这意味着当下载Connector/NET 8时存在版本不兼容性,从而导致ADO.Net数据实体向导关闭。
-第三步(最后一步)-
转到您的App.config文件,并将“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, Version=6.10.7.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />-->
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.EntityFramework, Version=8.0.12.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</providers>
完成了,现在构建项目,你可以创建你的实体数据模型(例如数据库优先),并将你的MySql数据库映射到你的项目上并查询它
资源:
https://www.youtube.com/watch?v=xvgeeaVP4M4
https://www.devjockeys.com/blog/c-sharp/using-entity-framework-with-mysql-a-code-first-example/
https://ozanecare.com/connect-mysql-with-visual-studio-2019/
Entity Framework With mysql Database First
Visual Studio 2019
(这也适用于Visual Studio 2017和2015 #测试)。 - Hicham O-Sfh