gpt4 book ai didi

c# - Entity Framework : LINQ query generates different SQL between local execution and server execution

转载 作者:太空狗 更新时间:2023-10-29 23:46:26 25 4
gpt4 key购买 nike

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

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

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

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

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

提前谢谢你。

最佳答案

所以最后,问题是框架版本。我认为它是相同版本的 .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 时...

关于c# - Entity Framework : LINQ query generates different SQL between local execution and server execution,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17656897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com