实体框架5不在远程服务器上执行查询

时间:2013-07-11 17:36:33

标签: c# entity-framework-5 sql-server-2012

我使用Entity Framework 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实例可远程使用。我也检查了一下。使用相同数据库/实例的其他应用程序可以完全远程运行(不使用Entity Framework,而是使用OpenAccess)

SQL管理工作室也可以远程执行查询。

1 个答案:

答案 0 :(得分:0)

原来它与实体框架无关。

我的远程计算机上发布的应用程序丢失了旧的ORM(开放访问)中的DLL。即使旧的ORM的DLL仍然没有任何参考,它仍然需要它们。

我正在使用后台工作程序来执行查询,这就是为什么它不会在远程计算机上抛出丢失的DLL异常。

我必须在本地计算机上添加旧的ORM。这就是它在本地工作的原因。远程计算机从未安装过开放式访问权限。