实体框架适用于本地服务器但不适用于远程
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 主机