【问题标题】:Enable Entity Framework 6 for MySql (C#) in WinForms of Microsoft Visual Studio 2013在 Microsoft Visual Studio 2013 的 WinForms 中启用 Entity Framework 6 for MySql (C#)
【发布时间】:2014-03-28 16:24:40
【问题描述】:

昨天我知道 Entity Framework 是除了使用 Dataset 或 DataReader 访问数据库的另一种方法,然后我尝试使 Entity Framework 6 在 MVS 2013 中为我的 MySql 数据库服务器工作。

我用 .Net FrameWork 4.5.1 打开一个 WinForms。 (所以我只有 App.config 但项目中没有 app/web 配置) 在我安装了mysql-installer-community-5.7.3.0-m13.msi

通过安装EntityFramework包

工具菜单 -> 库包管理器 -> 管理 NuGet 包 解决方案...->在线->(搜索)EntityFramework(注意版本 这个包的版本应该是6.0.2,如果不是,请点击 更新 -> 要更新的实体框架)

当我尝试通过

添加 ADO.NET 实体数据模型时

右键项目->添加->新建项目->ADO.NET实体数据模型 -> 从数据库生成 -> 新连接 -> 数据源:-> 更改...-> MySQL 数据库 -> 用服务器IP、用户名和密码填写服务器名称 -> 选择数据库名称-> 测试连接-> 确定

然后生成实体连接字符串->勾选将App.Config中的实体连接设置保存为->下一步>->

您要使用哪个版本的实体框架? 有选项 Entity Framework 6.0 但你不能使用它,因为

"你的项目引用了最新版本的Entity Framework; 但是,与此兼容的实体框架数据库提供程序 找不到您的数据连接的版本。退出此向导, 安装兼容的提供程序,然后重新构建您的项目 执行此操作”。

如何解决?

顺便说一句,如果您在 Nuget 包中安装 Entity Framework 5 版,那么您可能会在此处选择 Entity Framework 5.0,并且您可能会成功使用 Entity Framework 5 但不能使用 Entity Framework 6 版。

【问题讨论】:

    标签: c# mysql winforms visual-studio-2013 entity-framework-6


    【解决方案1】:

    首先,我们甚至不需要安装 mysql-installer-community-5.7.3.0-m13.msi。

    1. 安装最新的mysql-visualstudio-plugin
    2. 安装最新的mysql-connector-net
    3. 新的 C# .Net 4.5 框架 WinForms(对于 4.0 它应该基于 Does Entity Framework 6 support .NET 4.0? 工作)
    4. 安装4个Nuget包(按照顺序,如果你在EntityFramework之前安装Mysql.Data.Entities,它将解决依赖并安装EntityFramework6.0.2但是我们需要什么是 EntityFramework 6.1.0)

    实体框架

    Mysql.Data

    Mysql.Data.Entities

    Mysql.Web

    5.如果App.config中有标签entityFramework,请在标签启动后将其注释并在App.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" />
        </providers>
      </entityFramework>
    

    6.添加ADO.NET实体数据模型(如问题所述)

    7.After Entity Connection string is generated(如问题所述)并在App.Config中勾选Save entity connection settings as然后单击Next

    8.选择您的数据库对象和设置(表、视图或存储过程和函数)(没有“您要使用哪个版本的实体框架?”因为我有只有一个 Entity Framework 6.0 提供者,如果我唯一的提供者有效,请直接跳过选择)

    9.完成

    恭喜^^

    顺便说一句,您可能需要添加 .dll 文件

    • MySql.Data.dll
    • MySql.Data.Entity.EF6.dll
    • MySql.Web.dll

    在这个文件夹中

    C:\Program Files\MySQL\MySQL Connector Net 6.8.3\Assemblies\v4.5 (32 位窗口)

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

    作为您的项目参考,以获取更多 EF6 功能。

    【讨论】:

    • 我遇到了同样的问题,并按照您的回答并设法解决。谢谢
    • 这让我通过了,但现在在第 7 步之后,对我来说它只是关闭了整个 EF 向导,我必须从头开始,就好像它出错了一样。有什么想法吗?
    • 对于那些转换现有项目的人,我必须卸载上面列出的所有包(以相反的顺序),然​​后重新安装它们。我尝试升级,但最终 ADO 实体向导关闭而没有做任何事情(可能是静默崩溃)。
    • 这里的关键点是确保在数据库提供程序之前安装 Microsoft 实体框架包。否则事情似乎会破裂。
    • 最终我不用手动添加任何引用就让它与 Nuget 一起工作。问题是您应该引用 Mysql.Data.Entity 而不是 Mysql.Data.Entities。
    【解决方案2】:

    我按照 V-Shy 给出的指示,遇到了与 LaRae White 相同的问题,向导关闭了我。我正在运行 VS2015,刚刚使用 MySql 安装程序更新到 MySQL for Visual Studio v1.2.6 和 Connector/NET v6.9.8。

    为了让它发挥作用,我最终所做的是:

    1. 卸载我之前为解决此问题而安装的所有软件包(EntityFramework、Mysql.Data、Mysql.Data.Entities、Mysql.Web)
    2. 手动添加了在 C:\Program Files (x86)\MySQL\Connector.NET 6.9\Assemblies\v4.5 中找到的以下引用:MySql.Data.dll、MySql.Data.Entity.EF6.dll 和 MySql .Web.dll

    我希望这可以帮助某人。

    【讨论】:

    • 我遇到了同样的问题,向导刚刚关闭,但什么也没发生。我也卸载了所有这些包,但是对于第 2 步,我只是再次重新安装了所有包,它工作正常。我更喜欢保留 NuGet 引用,以防团队中的其他开发人员加入。;)
    • 我尝试重新安装 Nuget,但没有成功。手动安装 3 个类库确实可以正常工作。
    • @ih303,我遇到了同样的问题。我按照这里的描述做了。然后没有连接字符串,所以我留下了引用并重新安装了软件包。然后我又回到了向导消失的问题。
    • 谢谢!你救了我! :)
    • 谢谢 - 这是唯一对我有用的东西 - 我讨厌它对我有用!为什么这行得通? nuget 包是否以某种方式损坏?
    【解决方案3】:

    我整天都在想如何解决这个问题,但没有任何帮助。 显然我发现了一件人们没有提到的事情

    model.edmx 属性中有完整的“DDL 生成模板”,默认设置为“SSDLToSQL10.tt (VS)”,但需要设置为“SSDLToMySQL.tt (VS)”

    而且它还产生了一个错误:

    运行转换:System.NullReferenceException:对象引用未设置为对象的实例。
    bla bla bla
    第 93 行 c:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\DBGen\SSDLToMySQL.tt

    是什么让我找到了 official bug in "MySQL for Visual Studio 1.1.3",它将在下一个版本 1.1.4 中修复,目前尚不可用。

    但是有解决方法:
    通过来自 NET 的文件覆盖
    C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssemblies
    中的 "MySql.Data.Entity.EF6.dll"
    中的连接器 C:\Program Files (x86)\MySQL\MySQL Connector Net 6.8.3\Assemblies\v4.5\

    【讨论】:

    • 非常感谢,DDL 模板也是为我造成的!
    • 这是一个解决错误问题的好方法。 OP说他不能生成edmx文件,而你的答案在生成edmx文件后继续。
    【解决方案4】:

    修复方法如下:

    1. 安装 MySQL Visual Studio 插件
    2. 为 .NET 安装 MySQL 连接器
    3. 在 Program Files 中的 MySQLConnector 程序集的项目中添加引用。
    4. 从 App.Config 或 Web.Config 中删除旧代码

      <entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> <parameters> <parameter value="mssqllocaldb" /> </parameters> </defaultConnectionFactory> <providers> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> </providers> </entityFramework>

    5. 用下面给出的代码替换:

      <entityFramework> <defaultConnectionFactory type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.Entity.EF6"> </defaultConnectionFactory> <providers> <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" /> </providers> </entityFramework>

    6. 重建项目并尝试添加新的 ADO .NET 实体数据模型

    【讨论】:

    • 不清楚:2017 年 2 月有两个 MySql.ConnectorNet 包:MySql.ConnectorNet.Data 和 MySql.ConnectorNet.Entity。安装其中一个或两个都没有帮助,向导就消失了。
    • 非常烦人的@HaraldCoppoolse 我也遇到过同样的问题。
    【解决方案5】:

    确保您的 DbContext 具有 MySQL 文档中所示的注释:

    [DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
    public partial class MyDbContext : DbContext
    {
    }
    

    我一直发现我的数据库优先 ASP.NET MVC 应用程序允许我更新我的 EDMX 文件,直到我在另一台机器上将其从源代码控制中删除。

    我希望这可以帮助无法更新他们的 EDMX 或在将 MySQL 与 Entity Framework 6 一起使用时发现错误的人,因为在添加注释之前我一直面临同样的错误。

    【讨论】:

    • 谢谢,我已经安装了连接器和支持软件,添加了提供程序设置,继承的 DbContext 等,但是在尝试创建 ADO.net 时仍然无法将其视为数据提供程序实体数据模型——上面添加属性注解解决了问题。
    • 很高兴听到这对某人有所帮助,直到我意识到它让我如厕!
    【解决方案6】:

    我遇到了同样的问题,尝试了各种修复,比如这里的修复,还有一些来自 MySQL 论坛的修复,但仍然无法更新我的 EDMX。

    一段时间后(非常长的时间),我设法让这个东西与 VS 2013 update 3、.Net 连接器 6.9.4、Mysql for VS 1.2.3 for my MvcApplication 一起使用。

    首先,我在一台全新的机器上进行了尝试,一切都通过简单的 VS 安装,然后是连接器和用于 VS 的 Mysql。 然后,我还尝试了旧的 VS 2012,它也可以工作。 我已经在我的机器上用 EF5 编写了一些项目,并且认为旧的 EF5 文件可能会干扰 EF6 的文件。

    这就是我所做的,但你必须记住,这是一个与机器相关的问题,我给你列出了我在绝望中尝试过的所有事情:

    1. 删除 C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssemblies 文件夹中的所有 MySql.*.dll

    2. 用 Connector 文件夹中的那个覆盖文件夹 C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\PublicAssemblies 中的 MySql.Data.Entity.dll

    3. 在 Nuget 控制台中从您的项目中卸载 EntityFramework,然后降级到 EF 6.0.0:Install-Package EntityFramework -ProjectName YourProject -version 6.0.0

    4. 添加对 MySql.Data.Entity.EF6 的引用不是使用 Nuget,而是直接引用文件 (C:\Program Files (x86)\MySQL\MySQL Connector Net 6.9.4\Assemblies\v4.5 \MySql.Data.Entity.EF6.dll)

    我的 app.config 文件如下所示

    <configuration>
        <configSections>
            <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
        <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --></configSections>
        <startup>
            <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
        </startup>
        <entityFramework>
            <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
            <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>
        <connectionStrings>
            <!-- your connection string here -->
        </connectionStrings>
    </configuration>
    

    而项目中添加的引用就是这三个

    • 实体框架
    • EntityFramework.SqlServer
    • MySql.Data.Entity.EF6

    也许有些步骤没用,但现在我终于可以更新我的 EDMX 文件了,当然,构建和运行 Web 项目,VS 似乎不会受到删除 MySql DLL 的影响。 希望对您有所帮助。

    【讨论】:

      【解决方案7】:

      我也有同样的问题。就我而言,我必须:

      • 在启动添加模型向导之前,在添加包之后重建项目。
      • 卸载最新版本的实体框架包并恢复到版本 6.0.0.0。
      • 在安装 Mysql.Data.Entities 后安装 Mysql.Data.Entities.EF6!!
      • 更改配置文件,以便只有一个 MySql.Data.MySqlClient 提供程序位于提供程序内部,并且应该包含版本:

        <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.9.5.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
        </providers>
        

      【讨论】:

      • 重建部分是我需要的。困难的部分是在没有模型的情况下获得干净的构建,大量的注释!
      【解决方案8】:

      这些答案都没有为我解决。唯一有效的是安装 MySql.Data.EntityFramework NuGet 包。我重新启动 VS,重建,然后能够通过向导。 (VS2017 15.8.7 中的 WPF)。

      【讨论】:

      • 我尝试了上述所有解决方案,但没有任何效果。只有这在 VS 2017 中对我有用
      【解决方案9】:

      我对 VS2013 Community 也有类似的问题,但我的不是 WinForm 而是 ASP.NET MVC。在遵循上述所有解决方案后,我的问题仍然存在,但他们(尤其是 Hamed)给了我一些解决问题的想法。

      因此,如果您仍然滚动到此处,这可能会给您一个想法。我有:

      1. 已安装 MySQL Connector NET 6.8.4(6.9.5 似乎不起作用)。
      2. 为 VS 1.2.3 保留 MySQL(无需安装 1.1.1,因为 1.2.3 有效)。
      3. 从 NuGet 安装 MySQL.data Mysql.Data.entities。
      4. 从 D:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssemblies 中删除了所有 MySQL.dll。
      5. 按照哈米德说的做。
      6. 重建解决方案。
      7. 成功添加了新的 ADO.NET 实体模型。

      希望对您有所帮助。

      【讨论】:

        【解决方案10】:

        在过去 2 天中挣扎了几个小时后,最终帮助我的是将我的所有代码恢复为旧的 EF5 代码,删除 ADO .NET 实体数据模型并重新添加它WITHOUT 选择实体框架 6.0(已禁用),但选择 5.0。 由于最新的 mysql 连接器、Visual Studio 插件和我安装的所有其他东西,Visual Studio 自动添加了一个实体框架 6.0 ADO 实体数据模型,而忽略了我的“选择”。 然后,我在任何需要它的项目(EntityFramework、mysql.data、mysql.data.entity.EF6 版本 6.9.6)中手动添加了所有引用,终于它工作了。

        【讨论】:

        • (让 MySQL 使用旧连接器与 EF6 一起工作,但不记得哪个版本)我可以确认这种方法适用于 MySQL Connector Net 6.9.7、MySQL for Visual Studio 1.2。 3,和实体框架 5。“缺乏证据......”和所有那些爵士乐,但我想不出任何方法让 EF6 与更新的连接器一起工作,并发现自己处于干预某些事情的境地这阻止了我回到我的工作配置(即我忘记了如何找到正确的信息)
        【解决方案11】:

        我遇到了像 ih303 这样的问题。 我是如何解决的:

        -Follow solution V-SHY

        -如果没有错误消息或类似的东西,向导就会消失 -> 执行以下解决方案(对我有用):

        而不是放入:

            <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>
        

        将其更改为以下内容:

            <entityFramework>
              <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
                <parameters>
                  <parameter value="mssqllocaldb" />
                </parameters>
              </defaultConnectionFactory>
              <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 和 SQL Express 数据库,但向导仍然消失了(VS 2015,一切都是 2017 年 2 月的最新版本)
        • @HaraldCoppoolse 很抱歉听到这个消息。如果您愿意,我可以帮助您使用 TeamViewer。通常我不会那样做,但是这个问题太烦人了。目前的问题是我不太记得我做了什么^^。一个月前我和我的项目合作伙伴一起解决了同样的问题,我在 10 分钟内解决了它。
        【解决方案12】:

        我设法通过删除以下引用使其正常工作:

        MySql.Data.Entity.EF6
        MySql.Data
        

        相反,我安装了 Nuget

        MySql.Data.Entity

        它所做的不仅是添加对上面删除的框架的引用,而且还在项目中进行了一些配置更改。安装 nuget 后,我​​还重新构建了项目,以便将 dll 文件添加到 bin 目录中。

        【讨论】:

          【解决方案13】:

          对我来说,这似乎与 32 位 VS 64 位数据库驱动程序有关。

          至少在这一点上,我可以通过将配置更改为 x64 来在出现此错误和不出现此错误之间来回切换。尝试任何 CPU 都行不通,尝试 x86 也行不通。

          我不确定在哪里决定是使用 32 位还是 64 位 MySQL 驱动程序;安装程序声称两者都安装。

          (我还需要添加一个或多个 NuGet 包 MySql.DataMySql.Data.EntityMySql.Data.Entities,以及 EntityFramework。)

          一旦我将模型添加到我的项目中,我就可以将项目切换回 x86,到目前为止没有任何问题。

          【讨论】:

            【解决方案14】:

            当我们使用 Oracle 连接添加项 ADO.NET 实体数据模型时,错误消息显示“您的项目引用了最新版本的实体框架...”

            解决步骤在这里;

            1. 将 Oracle ODTwithODAC122010 安装为 32 位

            2. 在 VS2017 中创建您的项目

            3. 将主动解决方案平台从 AnyCPU 更改为 32 位

            4. 打开工具->Nuget PackageManager->管理解决方案的Nuget包

            5. 编写浏览区“ODP”并安装以下程序

            甲骨文。托管数据访问 和 Oracle.ManagedDataAccess.EntityFramework

            6.打开工具->Nuget PackageManager->包管理器控制台

            7.编写此安装包EntityFramework -Version 6.1.1并输入

            8.重新启动Visual Studio以完成该过程

            9.重新构建您的应用程序

            1. 添加新项 ADO.NET 实体数据模型

            11.如果需要,添加到 Oracle 的新连接(数据源 = Oracle 数据库(ODP.NET,托管驱动程序))

            12.一切正常。

            注意,我怀疑 EF6.1.3 不适用于 VS2017 和 Oracle ODTwithODAC122010。但是在所有这些过程之后,我已经将 EF 更改为 EF6.1.3 它正在工作 但我不建议你。

            【讨论】:

              【解决方案15】:

              对我来说,重新安装解决了问题

              • 连接器/网络(版本:8.0.19)
              • Visual Studio 的 MySQL(版本:1.2.9)

              现在我也可以使用 vs2017 和 vs2019 生成 edmx。

              【讨论】:

                【解决方案16】:

                对我有用的解决方案是首先按照@V-SHY的步骤安装MySql.Data.Entity

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2023-03-18
                  • 1970-01-01
                  • 2013-12-07
                  • 2015-09-25
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多