我使用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="data source=192.168.0.11;initial catalog=MyDatabase;user id=MyUser;password=MyPassword;MultipleActiveResultSets=True;App=EntityFramework""
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管理工作室也可以远程执行查询。
答案 0 :(得分:0)
原来它与实体框架无关。
我的远程计算机上发布的应用程序丢失了旧的ORM(开放访问)中的DLL。即使旧的ORM的DLL仍然没有任何参考,它仍然需要它们。
我正在使用后台工作程序来执行查询,这就是为什么它不会在远程计算机上抛出丢失的DLL异常。
我必须在本地计算机上添加旧的ORM。这就是它在本地工作的原因。远程计算机从未安装过开放式访问权限。