实体框架向导在MySQL上崩溃

时间:2015-01-25 18:46:45

标签: mysql entity-framework visual-studio-2013

我的问题类似于this one,但崩溃发生在以后。我必须在SQL Server和MySQL之间互操作EF数据库优先模型。更具体地说,我的应用程序根据连接字符串和配置设置(DB_TYPE=MYSQL等)向SQL Server或MySQL发出了简单的SQL查询,两个数据库具有相同的结构并保持在一起,以便每个修改一个架构被重新应用到另一个。

现在,我使用SQL Server数据库优先模型为应用程序添加了EF支持。我必须现在让应用程序也在MySQL上运行。为了验证旧开发人员没有在两个DBMS之间留下不对称的东西,我尝试Update model against database *,这次我在localhost上选择了MySQL连接到我的开发数据库。

点击下方屏幕上的Next后,它会崩溃并返回EDMX编辑器

Data Model wizard

我需要继续这个项目,我已经坚持了一段时间。

这是我的Web.config片段:

<entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v11.0" />
      </parameters>
    </defaultConnectionFactory>
    <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 invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </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=6.9.5.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
    </DbProviderFactories>
  </system.data>

如何解决我的问题?我为Visual Studio重新安装了MySQL工具,但没有帮助。

*我使用Visual Studio的本地化版本,因此我不知道所有命令的原始英语

12 个答案:

答案 0 :(得分:3)

我不知道为什么会这样,但是我进入了我的NuGet包管理器并删除了MySql.Data.Entity(还检查了删除MySql.Data的依赖项)。我进入了我的.edmx并从数据库中运行了更新模型......&#39;一切正常。

(注意:这也删除了我的实体框架,所以我不得不在使用NuGet Manager时添加它)

... w ^Ť... F?

也许其他人可以证实这一点......

答案 1 :(得分:2)

我按照以下步骤解决了这个问题(请注意我使用的是vs2015和.net 4.5)

1)卸载所有以前的mysql连接器

2)通过NuGet包删除所有mySQL引用

3)下载mysql连接器v6.8.8

4)下载后,转到您的项目并添加新安装的dll文件作为参考(位于安装路径中,通常为C:\ Program Files(x86)\ MySQL \ MySQL Connector Net 6.8.8 \ Assemblies \ V4.5)

5)转到NuGet包并添加MySql.Data(版本6.8)和MySql.Data.Entity(版本6.8)。

6)构建解决方案,不再崩溃:)

希望这可以帮助你

答案 2 :(得分:1)

当你环顾四周时,这似乎是一个普遍的问题。我知道这条路沿着这条路走,但是迟到总比没有好。

我最终删除并重新安装了visual studio 2015和mysql,然后从头开始。然后我确保我完成了仅仅需要的过程。

  1. 使用nuget install MySql.Data 6.9.9和MySql.Data.Entity 6.9.9。没别了。
  2. Nuget不会正确更改网络配置,因此您需要按以下方式更改它。
  3. <entityFramework>
        <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
        <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" />
        <providers>
            <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
        </providers>
    </entityFramework>
    

    这为我修好了。我不确定你是否需要重新安装,但肯定你需要做第2步。

    祝你好运。

答案 3 :(得分:0)

我有类似的问题。安装&#39; MySql.Data 6.9.9&#39;和&#39; MySql.Data.Entity 6.9.9&#39; Nuget包,该向导在该屏幕后崩溃。我附加了一个调试器,发现它是由MySql.Data.Entity.EF6.dll中的空引用异常引起的。

我认为它可能不是软件包,因为我已经尝试重新安装它们,所以我认为它可能是Visual Studio的MySQL安装与MySQL EF6 dll冲突的问题。对我来说,解决方案只是重新安装最新的#34; MySQL for Visual Studio 1.2.6&#34;:

http://dev.mysql.com/downloads/windows/visualstudio/

可能是我有一个旧版本(没想到先检查,所以我无法确认)。

答案 4 :(得分:0)

就我而言,原因是安装的mysql连接器的版本与引用的MySQL.Data.Entity版本不同 当我引用相同的版本时,一切都变好了。

答案 5 :(得分:0)

好吧,我可以告诉你,MySQL为MySql Server 8推出的连接器8.0.xxx和所有8.0.xxx dll都是完整的破坏。

一年多来,https://bugs.mysql.com/bug.php?id=91030&thanks=3&notify=195出现了一个重大错误。

如果您尝试使用MySql 8.0,许多连接器和库都会给您一个错误。...

“提供程序未返回ProviderManifestToken字符串。”

这证明了在mysql dll的连接器和文档中应用的Visual Studio支持,文档,测试和基本开发技能的绝对低于零水平,这是我醒来的最后40个小时中试图将一个工作模型,以使我的应用程序与MySql 8.0.16连接并具有工作实体框架向导。现在,我几乎希望我使用SQL Server进行开发。

我正在使用ASP.NET Identity 2.0的变体,这是我尝试登录时会得到的信息

“提供程序未返回ProviderManifestToken字符串。”

无论如何,这就是我要为我工作的东西。

这是我必须使用Windows 10上的Server 8.0进行的连接,并允许使用ASP.NET Identity 2.0登录,并且至少将运行数据实体向导以完成操作。

安装连接器/ Net 6.10.7

DLL的

c:.. \ EntityFramework.6.2.0 \ lib \ net45 \ EntityFramework.dll

C:.. \ EntityFramework.6.2.0 \ lib \ net45 \ EntityFramework.SqlServer.dll

C:.. \ MySql.Data.6.10.7 \ v4.5.2 \ MySql.Data.dll

C:.. \ MySql.Data.6.10.7 \ v4.5.2 \ MySql.Data.Entity.EF6.dll

Web.Config

<configSections>
    <section name="entityFramework"type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral,publicKeyToken=b77a5c561934e089" requirePermission="false" />      
    </configSections>

<connectionStrings>
 <add name="DefaultConnection" connectionString="server=localhost;user id=<yourid>;password=<yourpassword>;persistsecurityinfo=True;database=<yourdbname>" providerName="MySql.Data.MySqlClient" />
   </connectionStrings>


<entityFramework>
  <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
  <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>
        </providers>
</entityFramework>

<system.data>
   <DbProviderFactories>
       <remove invariant="MySql.Data.MySqlClient"></remove>
      <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.10.7.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
    </DbProviderFactories>
</system.data>


我希望这对外面的人有帮助,但我感到您的里程可能会有所不同。

答案 6 :(得分:0)

对于仍然遇到此问题的任何人,以下是我必须安装的版本才能使其正常工作:

针对Visual Studio的MySQL:2.0.5(请注意,发布最新的“通用版本”为1.2.9时-您需要转到“开发版本”标签以获取版本2.0.5-{{3 }})

MySQL Connector / NET:6.9.11(https://dev.mysql.com/downloads/windows/visualstudio/

MySQL.Data NuGet软件包:6.9.11(Install-Package MySql.Data -Version 6.9.11)

MySQL.Data.Entity NuGet软件包:6.9.11(Install-Package MySql.Data.Entity -Version 6.9.11)

(请注意,我不必调整配置文件。)

希望有帮助。

答案 7 :(得分:0)

another thread中已经回答,典型的崩溃原因是MySQL连接器和MySQL.Data.Entity的版本不匹配。

您获得错误版本的最可能原因是因为程序包名称从MySQL.Data.Entity更改为 MySql.Data.EntityFramework

我花了大量时间尝试线程中的答案,所以仅供参考。

答案 8 :(得分:0)

问题是MySQL,Visual Studio,连接器和MySQL for Visual Studio的兼容性。


  1. 关闭Visual Studio。
  2. 您需要卸载MySQL Connector和MySQL for Visual Studio。 (重新启动计算机)
  3. 如果您有Visual Studio的两个版本,则只能在其中一个版本中使用。因此,选择您想要的。
  4. 安装正确的版本。 (重新启动计算机)。

    • Visual Studio 2019(社区,专业和企业) -适用于带连接器/ NET 8.0.14的Visual Studio 1.2.9的MySQL
    • Visual Studio 2017(社区,专业和企业): -适用于带有Connector / NET 6.9.9的Visual Studio 1.2.7的MySQL
    • Visual Studio 2015(社区,专业和企业): -适用于带连接器/ NET 6.9.8的Visual Studio 1.2.7或2.0.2的MySQL
  5. 打开VS并构建您的项目,然后尝试更新您的实体

enter image description here 实际上,我正在将VS专业版2017与该块MySql.Data 6.9.9和MySql.Data.Entity 6.9.9(用于Connector / NET 6.9.9的Visual Studio 1.2.7的MySQL)配合使用

答案 9 :(得分:0)

就我而言,问题在于特定版本的 MySQL 服务器。所以我已经卸载了所有内容并使用这些版本进行了全新安装。

这是适用于 VisualStudio 2019 社区的设置:

  1. 关闭 VisualStudio

  2. 卸载(从 Windows 控制面板):

    • 用于 VisualStudio 的 MySQL
    • MySQL 连接器网络
    • MySQL 服务器
  3. 检查 PrivateAssemblies 文件夹并删除任何 MySQL。* 程序集:

    • C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\PrivateAssemblies
  4. 如果需要,请安装 MySQL Server 5.7.33 版

    • Workbench 可以是任何版本。
    • 设置您的服务器。
  5. 安装MySQL Connector Net 6.8.8

    • 该版本在 MySQL 存档中不可用。您可以找到寻找名称的镜像:mysql-connector-net-6.8.8.msi
  6. 安装 MySQL for VisualStudio 1.2.8

此时,可以打开VS,测试生成EntityFramework模型

构建和运行:

  1. 从文件夹中引用所需的程序集:

    • C:\Program Files (x86)\MySQL\MySQL Connector Net 6.8.8\Assemblies\v4.5
  2. 确保您的项目目标框架版本与 MySQL 程序集 (v4.5) 兼容

  3. 在您的配置文件中查找 MySQL 引用以指向版本 6.8.8

参考文献:

答案 10 :(得分:0)

不确定链接将如何保留,但这对于 .net core 非常有效。

https://www.c-sharpcorner.com/article/tutorial-use-entity-framework-core-5-0-in-net-core-3-1-with-mysql-database-by2/

总而言之,诀窍似乎是使用

Microsoft.EntityFrameworkCore (v5.0.0 – the latest stable version)
Microsoft.EntityFrameworkCore.Tools (v5.0.0 – the latest stable version)
Pomelo.EntityFrameworkCore.MySql (version 5.0.0-alpha.2)

在您的包管理器中。让它变得非常流畅。

我对非 Pomelo 的其他版本非常不满意。

使用 MySQL Connector Net 6.10.7 和 Server 8.0

答案 11 :(得分:-1)

我从

更改配置文件
<entityFramework>.....</entityFramework>

<entityFramework codeConfigurationType="MySql.Data.Entity.MySqlEFConfiguration, MySql.Data.Entity.EF6">.....</entityFramework>

一切正常

参考:https://dev.mysql.com/doc/connector-net/en/connector-net-entityframework60.html