5

好的,所以我有一个使用 ASP.net mvc 的网站,我遇到的问题是实体框架。我添加了所有引用并让它在我的本地机器上运行,但是当我发布它时,我收到以下错误。

System.InvalidOperationException:“System.Data.SqlClient”ADO.NET 的实体框架提供程序类型“System.Data.Entity.SqlServer.SqlProviderServices,EntityFramework.SqlServer,Version=6.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”无法加载提供程序。确保提供程序程序集可用于正在运行的应用程序。有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=260882

我仔细检查了我的参考资料,并将 EntityFramework.SqlServer 和 System.Data 都添加到我的项目中。我用来连接数据库并声明服务提供的连接字符串如下。

<connectionStrings>
<add name="[dataConnection]" connectionString="Data Source=[ip of host machine];Database=[name];UID=[user];pwd=*******;MultipleActiveResultSets=True;" providerName="System.Data.SqlClient" />
  </connectionStrings>

名称我们只是有数据库的名称,我的web.debug.config中也使用了这个

<connectionStrings>
<add name="[dataconnection]"
  connectionString="Data Source=.;Database=[name];UID=[user];pwd=*******;MultipleActiveResultSets=True;"
  xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
  </connectionStrings>

我对这整个事情都很陌生,只是把别人的代码交给了别人,所以我正在努力学习。这是我第一次遇到这个,所以任何方向都会受到赞赏。

4

2 回答 2

7

我在集成测试程序集中遇到了同样的问题(我为此使用了 ms Visual Studio 单元测试框架),我已经通过将 EF 程序集添加到 .testsettings 文件中的部署项来解决它。

  1. 我已经使用包管理器控制台安装了 EF 6 alpha,使用:Install-Package EntityFramework -Pre

这是我的 app.config

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <configSections>
        <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
      </configSections>
      <entityFramework>
        <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
      </entityFramework>
    </configuration>

我的连接字符串(我在代码中设置它):server=.\SIN;initial catalog=IntegrationTests;User ID=user;Password=pass;MultipleActiveResultSets=true;

  1. 我查看了 EF 程序集引用属性,看看它们是否设置为“复制本地”= True。最后我检查了 TestResults/../Out 文件夹,发现那里没有 EntityFramework.SqlServer 程序集(SqlProviderServices 类驻留在其中)。

  2. 所以我刚刚将两个 EF 6 程序集添加到我的部署项目中,现在一切正常 部署项目

您可以尝试将 EntityFramework.SqlServer 程序集复制到您的 Web 服务器目录以查看它是否有效。

也许这个链接会有所帮助

PS:

确保您没有对 System.Data.Entity 的引用,因为您将使用 GAC 中的一个。当您使用 Nuget 安装 EF 6 Alpha 程序集时,它们不会安装在 GAC 中。目标框架应该是 .NET 4.5。

对不起,我的英语不好。

于 2012-12-08T03:03:34.493 回答
0

一个问题:哪个 EF 版本?

检查您的 IIS 池 .NET 版本...它应该是指向您已发布项目的 .NET 版本的那个... EF 的程序集应该在 Windows 目录(AKA GAC)下的 .NET 框架文件夹中

于 2012-12-04T21:07:28.933 回答