首页 文章

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

提问于
浏览
40

昨天我知道实体框架是另一种使用数据集或DataReader访问数据库的方法,然后我尝试使实体框架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 - >填写服务器名称使用服务器IP,用户名和密码 - >选择数据库名称 - >测试连接 - >确定

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

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

“您的项目引用了最新版本的Entity Framework;但是,找不到与此版本兼容的Entity Framework数据库提供程序用于您的数据连接 . 退出此向导,安装兼容的提供程序,并在执行此操作之前重新构建项目” .

How to solve this?

顺便说一句,如果你在Nuget Package中安装Entity Framework版本5,那么你可能在这里有Entity Framework 5.0选项,你可能成功使用Entity Framework 5而不是版本6 .

15 回答

  • 2

    我设法通过删除以下引用来实现它:

    MySql.Data.Entity.EF6
    MySql.Data
    

    而我安装了Nuget

    MySql.Data.Entity

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

  • 85

    首先,我们 don't even need 安装mysql-installer- community -5.7.3.0-m13.msi .

    EntityFramework Mysql.Data Mysql.Data.Entities Mysql.Web

    5.如果您在 App.config 中有 tag 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 Entity Data Model (如上所述)

    7.在 Entity Connection string is generated 之后(如上所述)并在App.Config中勾选保存实体连接设置,然后单击“下一步” .

    8.选择数据库对象和设置(表,视图或存储过程和函数)(没有"Which version of Entity Framework do you want to use?"因为我有 only one Entity Framework 6.0提供程序所以如果我的唯一提供者有效则直接选择 skip

    9.Finish

    恭喜^^

    顺便说一句,您可能需要添加.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(32bit windows)C:\ Program Files(x86)\ MySQL \ MySQL Connector Net 6.8.3 \ Assemblies \ v4.5(64bit)视窗)

    作为进一步EF6功能的项目参考 .

  • -1

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

    我最终做的是让它发挥作用是这样的:

    • 卸载我之前安装的所有软件包以解决此问题(EntityFramework,Mysql.Data,Mysql.Data.Entities,Mysql.Web)

    • 手动添加了C:\ Program Files(x86)\ MySQL \ Connector.NET 6.9 \ Assemblies \ v4.5中的以下引用:MySql.Data.dll,MySql.Data.Entity.EF6.dll和MySql.Web .DLL

    我希望能帮助别人 .

  • 0

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

    至少在这一点上,我可以在出现此错误之间来回切换,而不是通过将我的配置更改为x64来解决此错误 . 尝试任何CPU都不起作用,尝试x86不起作用 .

    我不知道在哪里决定是使用32位还是64位MySQL驱动程序;安装程序声称同时安装 .

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

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

  • 0

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

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

    更有甚者,它还产生了一个错误:

    运行转换:System.NullReferenceException:未将对象引用设置为对象的实例 . bla bla bla line 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中修复,到目前为止还没有 .

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

  • 1

    修复方法如下:

    • 安装MySQL Visual Studio插件

    • 安装MySQL Connector for .NET

    • 在Program Files中的MySQLConnector程序集中添加项目中的引用 .

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

    • 替换为下面给出的代码:

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

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

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

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

    我一直发现我的 database first ASP.NET MVC应用程序允许我更新我的EDMX文件,直到我从另一台机器上的源代码控制中取出它 .

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

  • 4

    我有同样的问题,并尝试了各种修复,如在这里,也来自MySQL论坛,仍然无法更新我的EDMX .

    经过一段时间(非常长时间),我设法使用VS 2013更新3,.Net连接器6.9.4,用于我的MvcApplication的VS 1.2.3的Mysql .

    首先,我尝试了一台全新的机器,所有工作都只需要安装VS,然后连接器和Mysql for VS.然后,我也尝试了一个旧的VS 2012,它也有效 . 我已经在我的机器上用EF5编写了一些项目,并认为旧的EF5文件可能会干扰EF6文件 .

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

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

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

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

    • 不使用Nuget添加对MySql.Data.Entity.EF6的引用,而是直接引用该文件(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

    • EntityFramework.SqlServer

    • MySql.Data.Entity.EF6

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

  • 1

    我也有同样的问题 . 在我的情况下,我不得不:

    在启动添加模型向导之前添加包之后的项目

    • Rebuild .

    • 卸载最新版本的实体框架包并恢复为6.0.0.0版 .

    • NOT 安装Mysql.Data.Entities后安装Mysql.Data.Entities.EF6 !!

    • 更改配置文件,以便 only one 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>
    
  • 1

    我和VS2013社区有类似的问题,但我的不是WinForm,而是ASP.NET MVC . 按照上面的所有解决方案后,我的问题仍然存在,但他们(特别是Hamed)给了我一些想法来解决它 .

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

    • 已安装MySQL Connector .NET 6.8.4(6.9.5似乎不起作用) .

    • 按原样保存MySQL for VS 1.2.3(自1.2.3起作用后无需安装1.1.1) .

    • 从NuGet安装MySQL.data Mysql.Data.entities .

    • 从D:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ Common7 \ IDE \ PrivateAssemblies中删除了所有MySQL.dll .

    • 完成哈米德说 .

    • 重建解决方案 .

    • 成功添加了新的ADO.NET实体模型 .

    希望这有帮助 .

  • 1

    在最近两天挣扎了好几个小时后,最终帮助我的是将我的所有代码恢复到旧的EF5代码,删除ADO .NET实体数据模型并重新添加它 WITHOUT 选择实体框架6.0(已禁用) ,但选择5.0 . 由于最新的mysql连接器,visual studio插件和我上面提到的所有其他东西,visual studio自动添加了一个Entity Framework 6.0 ADO实体数据模型,忽略了我的"selection" . 然后我在所要求的任何项目中手动添加了所有引用(EntityFramework,mysql.data,mysql.data.entity.EF6 ver 6.9.6)和 finally 它的工作原理 .

  • 0

    我有像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>
    

    重建 - >添加向导等 - >应该工作 .

  • 2

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

    解决步骤在这里;

    • 将Oracle ODTwithODAC122010安装为32位

    • 在VS2017中创建项目

    • 从AnyCPU将Active Solution Platform更改为32位

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

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

    甲骨文 . ManagedDataAccess和Oracle.ManagedDataAccess.EntityFramework

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

    7.写这个Install-Package EntityFramework -Version 6.1.1并输入

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

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

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

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

    12.一切都好 .

    注意I quess EF6.1.3不能与VS2017和Oracle ODTwithODAC122010一起使用 . 但是在完成所有这些过程之后我将EF更改为EF6.1.3它正在工作但是我不建议你 .

  • 2

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

  • 4

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

相关问题