【问题标题】:Entity Framework With mysql Database First带有mysql数据库的实体框架
【发布时间】:2018-10-18 11:38:24
【问题描述】:

我正在一个使用 c# 的新项目中工作,我们想使用实体框架 6,但每次我们想根据我们使用的数据库生成模型。但是当我使用向导生成 ADO.Net 模型时,在我选择数据库和实体框架后,我单击“下一步”按钮,而是出现选择表的窗口,窗口消失而没有任何类型的错误.

我正在使用 Visual Studio 2017 社区版,并且我已经安装了 mysql 连接器 v.8.0.11。如果我将 mysql 连接器版本和实体框架降级到 v5,一切正常,但在我将连接器和实体框架更新到版本 6.* 后,我得到了上面报告的问题。

【问题讨论】:

  • 嗨,你找到解决办法了吗?

标签: c# mysql entity-framework


【解决方案1】:

所以在我自己挣扎了 3 天之后,我终于找到了问题......

因此,您必须从 NuGet 包版本下载的 MySql.Data 和 MySql.Data.Entity 与必须下载的 MySql Connector/NET 的版本直接相关。

当您查看 MySql.Data.Entity 的最新版本是 6.10.7 时,这意味着在下载 Connector/NET 8 时存在版本不兼容导致 ADO.Net 数据实体向导关闭。

下载以下内容并使用 BAM:

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 

【讨论】:

  • 我也必须这样做。我认为这与我的 db 版本有关。
  • 对我有用,你可以从这里下载连接器downloads.mysql.com/archives/c-net
  • 这真的很有帮助,我为连接器和两个包选择了 6.10.8 版本。成功了!.. 问题是版本必须完全相同!
  • 可能有用的资源:@​​987654322@
【解决方案2】:

有一点值得注意:

Mysql 6 和 8 需要不同的 Mysql EntityFramework Package。(这可能是发帖者将他/她的 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 连接器完全相同的版本。否则,某些事情将无法正常工作。

【讨论】:

    【解决方案3】:

    我能够通过在 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>
    

    我也参考了:

    【讨论】:

      【解决方案4】:

      这是您使用的 MySQL 连接器包版本的问题。就我而言,我使用的是 Nuget 的MySQL.Data, MySQL.Entity and MySQL.Web。如果我使用 6.9.11 之后的任何版本,那么我会得到你提到的行为。

      【讨论】:

      • 您的问题可能与stackoverflow.com/questions/49036983/…重复
      • 当我这样做时,一切正常,但我无法访问实体框架 v6 及其对这个项目的要求。在您的情况下,您使用的是 v5 或 v6 的实体框架?
      • Nuget 告诉我:6.2.0
      • 如果您不介意可以尝试使用该版本从数据库生成模型吗?
      • 没问题。我的测试成功了。在上面的链接答案中,有一点关于删除“MySQL for Visual Studio”的默认版本并安装最新的开发版本(2.0.5)。基本上,我认为甲骨文并没有真正测试它生产的 MySQL 软件。
      【解决方案5】:

      -第一步-
      使用 mySql 安装程序:https://dev.mysql.com/downloads/installer/
      下载
      1 - mySql 路由器
      2 - 连接器/ODBC
      3 - 连接器/C++
      4 - 连接器/网络
      5 - MySQl 服务器
      全部,完全在版本中:8.0.12

      然后转到visual studio &gt; manage nugget packages &gt; browse(tab)(并安装)
      1 - entityFramework -> 版本 6
      2 - mysql.data -> 版本 8.0.12
      3 - mysql.data.entity -> 版本 6
      4 - mysql.data.entityFramework -> 版本 8.0.12

      那就去visual studio &gt; manage nugget packages &gt; updates(tab)
      将 Google.protoBuf 更新到版本 3.6.0

      -第二步-
      Right click your project &gt; Add new Item &gt; Data (left navbar) &gt; Ado.net Data Model
      将出现连接对话框,使用您的 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>
            <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 这正是我提到的问题,当您至少有一个不同版本的组件时会发生这种情况,这就是我建议使用相同版本的原因,请验证您的 app.config 文件,或尝试重新安装每个组件的正确版本。 ps:我有 Visual Studio 2019(这也适用于 Visual Studio 2017 和 2015 #tested)
      猜你喜欢
      • 1970-01-01
      • 2014-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多