繁体   English   中英

在 Microsoft Visual Studio 2013 的 WinForms 中为 MySql (C#) 启用实体框架 6

[英]Enable Entity Framework 6 for MySql (C#) in WinForms of Microsoft Visual Studio 2013

昨天我知道 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 版,如果不是,则单击更新 -> EntityFramework更新)

当我尝试通过以下方式添加 ADO.NET 实体数据模型时

右键Project -> Add -> New Item -> ADO.NET Entity Data Model -> Generate from Database -> New Connection -> Data sources: -> Change...-> MySQL Database -> 填写Server name with服务器 IP、用户名和密码 -> 选择数据库名称 -> 测试连接 -> 确定

然后生成实体连接字符串 -> 在 App.Config 中勾选 Save entity connection settings as -> Next> ->

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

“您的项目引用了最新版本的实体框架;但是,无法为您的数据连接找到与此版本兼容的实体框架数据库提供程序。退出此向导,安装兼容的提供程序,并在执行此操作之前重新构建您的项目”。

如何解决这个问题?

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

首先,我们甚至不需要安装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,它应该基于实体框架 6 支持 .NET 4.0 吗?
  4. 安装 4 个Nuget 包(按照顺序,如果你在 EntityFramework 之前安装 Mysql.Data.Entities,它将解析依赖并安装 EntityFramework 6.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.生成实体连接字符串后(如问题所述)并勾选在 App.Config 中保存实体连接设置,然后单击下一步

8.选择您的数据库对象和设置(表、视图或存储过程和函数)(没有“您要使用哪个版本的实体框架?”因为我只有一个实体框架 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 功能的项目参考。

我遵循了 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

我希望能帮助别人。

我花了一整天的时间弄清楚如何解决这个问题,但没有任何帮助。 显然我想出了一件人们没有提到的事情

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

更重要的是它也产生了一个错误:

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

是什么让我找到了“MySQL for Visual Studio 1.1.3”中官方错误,错误将在下一个版本 1.1.4 中修复,目前尚不可用。

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

修复方法如下:

  1. 安装 MySQL Visual Studio 插件
  2. 为 .NET 安装 MySQL 连接器
  3. 在程序文件中的 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 实体数据模型

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

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

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

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

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

一段时间后(非常长的时间),我设法让这件事与 VS 2013 更新 3、.Net 连接器 6.9.4、Mysql for VS 1.2.3 一起用于我的 MvcApplication。

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

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

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

  2. 用连接器文件夹中的一个覆盖文件夹 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>

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

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

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

我也有同样的问题。 就我而言,我不得不:

  • 在启动添加模型向导之前添加包后重建项目。
  • 卸载最新版本的实体框架包并恢复到 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>

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

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

所以如果你仍然滚动到这里,这可能也会给你一个想法。 我有:

  1. 已安装 MySQL Connector NET 6.8.4(6.9.5 似乎不起作用)。
  2. 将 MySQL 保留为 VS 1.2.3(由于 1.2.3 工作,无需安装 1.1.1)。
  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 实体模型。

希望这有帮助。

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

我有像 ih303 这样的问题。 我是如何修复它的:

-遵循解决方案 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.Data.Entity.EF6
MySql.Data

相反,我安装了 Nuget

MySql.Data.Entity

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

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

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

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

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

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

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

解决步骤在这里;

  1. 将 Oracle ODTwithODAC122010 安装为 32 位

  2. 在 VS2017 中创建你的项目

  3. 将 Active Solution Platform 从 AnyCPU 更改为 32 位

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

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

甲骨文。 ManagedDataAccess 和 Oracle.ManagedDataAccess.EntityFramework

6.打开工具->Nuget PackageManager-> Package Manager Console

7. 编写这个 Install-Package 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,它正在运行但我不建议您。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM