2013-07-11 26 views
0

我的一个使用实体框架5的项目非常奇怪。实体框架5不在远程服务器上执行查询

如果我在与SQL Server 2012实例相同的机器上运行应用程序,那么一切正常。但是,如果我在远程机器上运行该应用程序,查询将无法执行。没有例外。我可以让应用程序运行数小时,而无需任何响应或活动。

我已经检查过应用程序正在使用连接字符串。它绝对是。

配置:

<connectionStrings> 
    <add name="ConnectionName" 
     connectionString="metadata=res://*/MyContext.csdl|res://*/MyContext.ssdl|res://*/MyContext.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=192.168.0.11;initial catalog=MyDatabase;user id=MyUser;password=MyPassword;MultipleActiveResultSets=True;App=EntityFramework&quot;" 
     providerName="System.Data.EntityClient" /> 
</connectionStrings> 
<entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"> 
    <parameters> 
     <parameter value="v11.0" /> 
    </parameters> 
    </defaultConnectionFactory> 
</entityFramework> 

为我的上下文的构造:

public partial class MyEntities : DbContext 
{ 
    public MyEntities (string connectionStringName) : base("name=" + connectionStringName) 
    { 
    } 
} 

即使是这样一个简单的代码块复制行为:

MyEntities dbContext = new MyEntities("ConnectionName"); 
List<Product> products = dbContext.Products.ToList(); 

因此,要回顾一下。这段代码在SQL实例运行的本地机器上执行得很好。在远程机器上,这段代码什么都不做。应用程序就在那里,不会抛出异常。不是超时,不是连接异常。一点都没有。

SQL Server实例可远程使用。我也检查过。使用相同数据库/实例的其他应用程序可以完美地远程运行(不是使用实体框架,而是使用OpenAccess)

而且SQL管理工作室在远程执行查询时也没有问题。

+0

哟确定没有涉及一些无限的超时? –

+0

我很确定没有理由超时。 我刚刚写了一个简单的测试应用程序在不同的解决方案。它使用相同的数据库和相同的connectiontring/configsection,并且测试应用程序可以在远程机器上工作。 – Erik

回答

0

原来,它与实体框架无关。

远程计算机上发布的应用程序缺少来自旧ORM(开放式访问)的DLL。尽管对于旧的ORM的DLL绝对没有任何参考,但仍然需要它们。

我正在使用后台工作来执行查询,并以某种方式这就是为什么它没有在远程计算机上抛出丢失的DLL异常。

我必须在本地机器上添加旧的ORM。这就是为什么它在当地工作。远程计算机从未安装过开放式访问。