实体框架使用错误的连接提供程序

时间:2013-10-01 07:04:04

标签: c# asp.net entity-framework ado.net

我正在尝试使用实体框架5(代码优先)用于ASP.NET Web窗体应用程序,我以前有一个使用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。

4 个答案:

答案 0 :(得分:1)

问题是陈旧的,但可能会对某人有所帮助。

从Oracle过渡到MS SQL Server,我遇到了同样的问题。 最终,代码迁移似乎是问题的根本原因。 切换到另一个数据库提供程序后,您不能将它们保留为原样。 因此,您必须为新数据库提供程序重新进行迁移。

答案 1 :(得分:0)

I had the same issue with a different resolution, so I'll go ahead and post it here for the next person who searches.

I had my connection string listed where it could be found in the web config in the <connectionStrings></connnectionStrings> section. It seemed to be reading the connection string, but not the providerName.

I looked at it for a long time before realizing that I had needlessly put it inside the <runtime></runtime> section.

When I put my <connectionStrings> back in the root of <configuration>, Entity Framework started using the right provider again.

答案 2 :(得分:0)

我最近遇到了同样的问题,您的App.config文件中有一个问题。   只需重新创建它即可。 (创建一个黑色项目并复制其默认app.config并替换它)。 然后重新安装nuget软件包。

祝一切顺利。

答案 3 :(得分:0)

以上答案均未解决我的问题。我最终创建了一个新的解决方案,并复制了所有源代码(web.config和Migrations除外),并且一切正常。