使用MySQL数据库的实体框架数据库优先。

6
我正在使用C#开发一个新项目,我们想使用Entity Framework 6。但每次想要基于我们正在使用的数据库生成模型时,当我使用向导生成ADO.Net模型时,选择数据库和实体框架后,点击“下一步”按钮,窗口消失且没有任何错误提示,也没有出现选择表的窗口。
我使用的是Visual Studio 2017 Community Edition,并安装了MySQL Connector v.8.0.11。如果我将MySQL Connector版本和Entity Framework降级到v5,则一切正常,但是如果将连接器和实体框架更新到版本6.*之后,我遇到了上述问题。

嗨,你找到任何解决方案了吗? - frhack
5个回答

11

我自己努力了三天之后,终于找到了问题所在...

所以,你必须从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 

我也不得不这样做。我认为这与我的数据库版本有关。 - Jason Amoss
1
这对我很有用,你可以从这里下载连接器 https://downloads.mysql.com/archives/c-net/ - Arash.Zandi
1
那真的很有帮助,我选择了6.10.8版本的连接器和两个包。它有效了!问题在于版本必须完全相同! - Dhrumil Bhankhar
可能有用的资源:https://dev.mysql.com/doc/connector-net/en/connector-net-versions.html - jing

4
值得注意的一点是:
您需要不同的Mysql EntityFramework包来适配Mysql版本6和版本8。(这可能是为什么发布者将他/她的mysql连接器从8降级到6的原因)
如果您的mysql连接器是8.x.x版本,您可能需要安装此NuGet包: https://www.nuget.org/packages/MySql.Data.EntityFramework/ 如果您的mysql连接器是6.x.x版本,您将需要: https://www.nuget.org/packages/MySql.Data.Entity/ 并且安装与您的mysql连接器完全相同的版本。否则,某些功能将无法正常工作。

2
我能够通过在Web.config文件中使用以下配置来解决此问题。
<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>

我也参考了以下内容:


1
这是与您使用的MySQL连接器包的版本有关的问题。在我的情况下,我正在使用Nuget中的MySQL.Data、MySQL.Entity和MySQL.Web。如果我使用6.9.11之后的任何版本,那么我就会遇到您提到的行为。

1
你的问题可能是 https://stackoverflow.com/questions/49036983/visual-studio-2017-not-showing-mysql-in-connection-list 的重复。 - 7 Reeds
Nuget 告诉我:6.2.0。 - 7 Reeds
如果您不介意的话,可以尝试使用该版本从数据库生成模型吗? - Rubemlrm
1
没问题。我的测试成功了。在上面链接的答案中,有关于删除“MySQL for Visual Studio”的默认版本并安装最新的开发版本(2.0.5)的内容。基本上,我认为Oracle实际上并没有测试它所生产的MySQL软件。 - 7 Reeds
尝试按照链接中的步骤操作,但遇到了相同的问题。但我会在其他电脑上测试这些步骤,只是为了检查我的设置是否有问题。 - Rubemlrm
显示剩余2条评论

0

-第一步-
使用 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


你使用的是哪个版本的VS?我能看到数据模型向导,但它似乎会崩溃并重新打开“添加项目”对话框。 - Daniel
@Daniel,这正是我所提到的问题,当您拥有至少一个不同版本的组件时会出现这种情况,因此我建议使用相同的版本,请验证您的app.config文件,或尝试重新安装每个组件的正确版本。 PS:我有Visual Studio 2019(这也适用于Visual Studio 2017和2015 #测试)。 - Hicham O-Sfh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接