5

我有一个非常基本的 Linq 查询,如果我在 Visual Studio 或 IIS 服务器上本地执行它,它不会返回相同的结果 - 但总是针对同一个数据库服务器。我使用 SQL Server Profiler 来跟踪执行的真实 SQL 查询,发现在本地或远程执行时并不相同!

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

from a in TableA.Include("TableB.TableC")
where a.Id == someId
select a;

事实上,第一个连接总是转换为内连接,但第二个在本地执行时是左连接。

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

先感谢您。

4

1 回答 1

1

所以最后,问题出在框架版本上。我认为它是相同版本的 .NET,但它不是:本地 4.0.30319.1 和远程 4.0.30319.17929。而且似乎 4.0.30319.17929 是 .NET Framework 4.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 版中添加的错误修复,因为它应该使用内连接,因为不可为空的外键(请注意,主键由几列组成)但是这种更改在升级到时很难检测到4.5...

于 2013-07-19T07:21:56.160 回答