我的问题类似于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编辑器
我需要继续这个项目,我已经坚持了一段时间。
这是我的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的本地化版本,因此我不知道所有命令的原始英语
答案 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,然后从头开始。然后我确保我完成了仅仅需要的过程。
在
<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¬ify=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的兼容性。
安装正确的版本。 (重新启动计算机)。
-
适用于带连接器/ NET 8.0.14的Visual Studio 1.2.9的MySQL -
适用于带有Connector / NET 6.9.9的Visual Studio 1.2.7的MySQL -
适用于带连接器/ NET 6.9.8的Visual Studio 1.2.7或2.0.2的MySQL 打开VS并构建您的项目,然后尝试更新您的实体
实际上,我正在将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 社区的设置:
关闭 VisualStudio
卸载(从 Windows 控制面板):
检查 PrivateAssemblies 文件夹并删除任何 MySQL。* 程序集:
如果需要,请安装 MySQL Server 5.7.33 版。
安装MySQL Connector Net 6.8.8
安装 MySQL for VisualStudio 1.2.8
此时,可以打开VS,测试生成EntityFramework模型
构建和运行:
从文件夹中引用所需的程序集:
确保您的项目目标框架版本与 MySQL 程序集 (v4.5) 兼容
在您的配置文件中查找 MySQL 引用以指向版本 6.8.8
参考文献:
答案 10 :(得分:0)
不确定链接将如何保留,但这对于 .net core 非常有效。
总而言之,诀窍似乎是使用
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