C# 实体框架:LINQ查询在本地执行和服务器执行之间生成不同的SQL

C# 实体框架:LINQ查询在本地执行和服务器执行之间生成不同的SQL,c#,linq,entity-framework,C#,Linq,Entity Framework,我有一个非常基本的Linq查询,如果我在Visual Studio或IIS服务器上本地执行它,它不会返回相同的结果,而是始终以相同的数据库服务器为目标。 我使用SQL Server Profiler跟踪实际执行的SQL查询,发现在本地或远程执行时都不一样 它在本地使用一个左连接,而在远程使用一个内部连接,因此它在本地返回一个记录,但不在远程返回。我认为良好的行为将是第二个,因为我在TableA和TableB之间定义了一个不可为空的外键。以下是Linq请求: from a in TableA.In

我有一个非常基本的Linq查询,如果我在Visual Studio或IIS服务器上本地执行它,它不会返回相同的结果,而是始终以相同的数据库服务器为目标。 我使用SQL Server Profiler跟踪实际执行的SQL查询,发现在本地或远程执行时都不一样

它在本地使用一个左连接,而在远程使用一个内部连接,因此它在本地返回一个记录,但不在远程返回。我认为良好的行为将是第二个,因为我在TableA和TableB之间定义了一个不可为空的外键。以下是Linq请求:

from a in TableA.Include("TableB.TableC")
where a.Id == someId
select a;
事实上,第一个连接总是在内部连接中转换,但在本地执行时,第二个连接是左连接

但我的首要任务是了解为什么它会在本地和远程生成不同的查询。 框架版本相同,实体框架版本相同(本地复制)。。。有些东西一定不一样,但我找不到什么!你有什么线索吗


提前感谢。

所以最后,问题是框架版本。我以为它是.NET的同一版本,但事实并非如此:本地版本为4.0.30319.1,远程版本为4.0.30319.17929。而且似乎4.0.30319.17929是.NETFramework4.5,所以它不仅仅是一个不同的构建。我已经卸载了版本4.5,并在服务器上重新安装了版本4.0。这很奇怪,因为它重新安装在文件夹C:\Windows\Microsoft.NET\Framework\v4.0.30319中,但文件版本现在是正确的,4.0.30319.1(之前的文件版本是4.0.30319.17929),然后我更改了IIS应用程序池中的.NET版本。卸载后已将其重置为2.0版,因此我将其重置为4版并重新启动池(但应用程序池中仍显示v4.0.30319版…)。现在它的工作原理与本地类似,它先进行一次内部连接,然后进行一次左连接


我认为这是版本4.5中添加的错误修复,因为它应该使用内部连接,因为外键不可为null(注意,主键由多个列组成),但这种更改在升级到4.5时很难检测到

您正在运行相同的应用程序吗?唯一不同的是连接字符串值?是的,相同的应用程序和相同的连接字符串。因此,您有不同的应用程序实例。确保已将相同的程序集部署到远程服务器哪个程序集正在生成SQL?EntityFramework.dll?我想问题出在定义查询的程序集中