0

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

此外,SQL 管理工作室远程执行查询也没有问题。

4

1 回答 1

0

原来它与实体框架无关。

我的远程计算机上发布的应用程序缺少旧 ORM(开放访问)中的 DLL。即使完全没有对旧 ORM 的 DLL 的引用,它仍然以某种方式需要它们。

我使用后台工作者来执行查询,这就是为什么它没有在远程机器上抛出丢失的 DLL 异常。

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

于 2013-07-12T09:50:38.957 回答