实体框架适用于本地服务器但不适用于远程

Posted

技术标签:

【中文标题】实体框架适用于本地服务器但不适用于远程【英文标题】:Entity Framework works on Local Server but not Remote 【发布时间】:2012-11-22 14:30:54 【问题描述】:

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

System.InvalidOperationException:“System.Data.SqlClient”的实体框架提供程序类型“System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”无法加载 ADO.NET 提供程序。确保提供程序程序集可用于正在运行的应用程序。请参阅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>

Name 我们只是有数据库的名字,这也用在我的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>

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

【问题讨论】:

【参考方案1】:

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

    我已经使用包管理器控制台安装了 EF 6 alpha,使用: 安装包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;

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

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

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

也许this link 会有所帮助

PS:

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

对不起,我的英语不好。

【讨论】:

这对我有用,我认为当我尝试发布我的网站时缺少 EntityFrameworkSqlServer.dll。【参考方案2】:

一个问题:哪个 EF 版本?

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

【讨论】:

我现在使用的版本是6.0.0.0。这适用于 EntityFramework 和 EntityFramework.SqlServer 没有 EF 6.0 - 据我所知...但是有 IIS 6。查看运行项目的 IIS 池。 IIS 6 的默认设置是运行 .NET 2.0,这可能就是无法识别 EF 程序集版本的原因。 正在运行的 .net Framework 版本是 4.0 版。 EF 框架实际上是 6.0 alpha-1。据我了解,它与 Visual Studio 2012 一起发布。如果我在此信息中有误,请告诉我,这正是我能够找到的。即使我所说的都是真的,.net 4.0 和 IIS7 之间会不会有冲突? (IIS7 是服务器正在运行的)。页面本身也可以运行,它仅在我尝试使用数据库时显示该错误。意思是当我尝试登录时 哦,我明白了...我通过 IIS 7 运行 EF 4.5 没有任何问题(在 VS 2012 RC1 中开发)。 EF 程序集是否在您的 DLL 文件夹中?如果没有,请将其复制到 GAC。 我确实检查了 dll 文件夹,它们都在那里。我认为服务器可能已经过时,所以我正在尝试更新它,看看它是否能解决问题。

以上是关于实体框架适用于本地服务器但不适用于远程的主要内容,如果未能解决你的问题,请参考以下文章

PHP 图片上传适用于本地主机,但不适用于 GoDaddy 服务器

PHP header('Content-Type : image/jpeg') 适用于本地主机但不适用于真实服务器

Verbatim PHP 代码适用于当前的实时站点,但不适用于新站点(本地或实时)

用于 DynamoDB 查询的 Python 代码适用于 v3.6,但不适用于 python 2.7

Java Spring MVC WebSocket 应用程序仅适用于本地应用程序服务器,但不适用于 openshift 主机

JSF 2.2 webapp适用于本地计算机,但不适用于服务器