use*_*338 5 c# linq entity-framework
我有一个非常基本的Linq查询,如果我在Visual Studio或IIS服务器上本地执行它,但不会返回相同的结果 - 但始终以同一数据库服务器为目标.我已经使用SQL Server Profiler来跟踪执行的真实SQL查询,并发现它在本地或远程执行时不一样!
本地它使用左连接而远程使用内连接 - 因此在本地它返回记录但不远程.我认为好的行为将是第二次,因为我在TableA和TableB之间定义了一个不可为空的外键.以下是Linq请求:
from a in TableA.Include("TableB.TableC")
where a.Id == someId
select a;
Run Code Online (Sandbox Code Playgroud)
实际上,第一个连接总是在内部连接中转换,但第二个连接是在本地执行时的左连接.
但我的首要任务是知道为什么它在本地和远程生成不同的查询.框架版本是相同的,实体框架版本是相同的(本地复制)...有些东西必须不同但我找不到什么!你有什么线索吗?
先感谢您.
所以最后,问题是框架版本。我以为这是相同版本的.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...
| 归档时间: |
|
| 查看次数: |
1196 次 |
| 最近记录: |