使用错误的连接提供程序的实体框架
本文关键字:程序 实体 框架 连接 错误 | 更新日期: 2023-09-27 18:33:28
我正在尝试将实体框架5(代码优先(用于 ASP.NET Web Forms应用程序,我以前使用MySQL连接运行了一个基本实现,并且我还成功地使用SQL Server Compact 4的桌面应用程序。
我遇到的问题是使用 EF5 出现错误
在配置中找不到指定的存储提供程序,或者 无效。
这几乎没有帮助。
升级到 EF6-rc1 给了我更有用的错误
具有固定名称"MySql.Data.MySqlClient"的 ADO.NET 提供程序是 未在计算机或应用程序配置文件中注册,或者 无法加载。有关详细信息,请参阅内部异常。
至少我现在知道"问题"是什么。
我遇到的问题是我已经从项目中删除了MySQL的所有跟踪,项目没有理由尝试加载MySQL提供程序。
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework">
<parameters>
<parameter value="System.Data.SqlServerCe.4.0" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
<provider invariantName="System.Data.SqlServerCe.4.0" type="System.Data.Entity.SqlServerCompact.SqlCeProviderServices, EntityFramework.SqlServerCompact" />
</providers>
<connectionStrings>
<add name="im_customerdb" connectionString="Data Source=|DataDirectory|'CustomerData.sdf" providerName="System.Data.SqlServerCe.4.0" />
</connectionStrings>
这些是我的web.config文件的摘录,如果还有其他相关部分可能指向解决方案,请告诉我。
我已经对解决方案中的每个文件进行了文本搜索,以查找单词MySQL,并且没有对MySQL的引用。我已经从源代码管理中检查了项目的干净版本,以确保在清除项目构建文件时没有遗漏文件。
任何人都可以提供任何线索,说明我应该在哪里寻找以确定为什么EF坚持加载MySQL提供程序?
问候安东尼
*编辑: * 只是为了补充一点,第一次访问数据库上下文时会引发异常,从堆栈跟踪中,在初始化数据库时会引发异常。我还注意到一些非常奇特的东西;数据库文件正在正确创建,似乎EF随后拒绝使用它并尝试使用MySQL。
问题很旧,但可能对某人有所帮助。
我在从Oracle过渡到MS SQL Server时遇到了同样的问题。最终,代码迁移似乎是问题的根本原因。在切换到另一个数据库提供程序后,您不能仅保留它们。因此,您必须为新的数据库提供程序重新生成迁移。
我在不同的分辨率下遇到了同样的问题,所以我将继续将其发布在这里供下一个搜索的人使用。
我列出了我的连接字符串,可以在<connectionStrings></connnectionStrings>
部分的 Web 配置中找到它。它似乎正在读取连接字符串,但不是providerName
。
看了很久,才意识到我没有必要把它放在<runtime></runtime>
部分。
当我把<connectionStrings>
放回<configuration>
根目录时,实体框架再次开始使用正确的提供程序。
我最近遇到了同样的问题,您的 App.config 文件中存在问题。 只需重新创建它,它就会起作用。(创建一个黑色项目并复制其默认 app.config 并替换它(。然后重新安装 nuget 包。
万事如意。
上面的答案都没有为我解决问题。我最终创建了一个新的解决方案,并复制了所有源代码(web.config 和迁移除外(,它起作用了。