我遇到了一个奇怪的问题。我有一个按实体框架的网格馈送,网格结果取自sql视图。它的代码首先是view的实体映射到实际的sql视图:
public class MyMap : EntityTypeConfiguration<MyViewEntity>
{
public MyMap()
{
ToTable("vw_MyView");
HasKey(v => v.OrderID);
}
}
我在sql中的视图有连接,这是由EF生成的简化查询,注释掉来自连接的字段:
SELECT
[Extent1].[a] AS [a],
[Extent1].[b] AS [b],
[Extent1].[c] AS [c],
--[Extent1].[SenderCountry] AS [SenderCountry],
--[Extent1].[SenderCode] AS [SenderCode],
[Extent1].[d] AS [d],
[Extent1].[e] AS [e],
[Extent1].[f] AS [f],
--[Extent1].[Occasion] AS [Occasion],
[Extent1].[g] AS [g],
[Extent1].[h] AS [h]
FROM [dbo].[vw_MyView] AS [Extent1]
WHERE [Extent1].[Receiver] = xxx
order by extent1.[date] DESC
OFFSET 40 ROWS FETCH NEXT 10 ROWS ONLY
此代码生成此类结果(字段)
119900
119934
119943
119948
119949
119968
120004
120020
120030
120057
现在让我们再次将senderCode字段放入查询中。 SenderCode来自表成员,它在Member.ID = mainTable.c上加入到我们的主表(这是来自b c d ..字段),结果是:
120117
119943
119934
119948
119949
120120
120121
120122
120030
120057
119900从结果中消失,120117跳到它的位置。所有输出记录都有d字段,每个记录的值为2,除了记录119900有3。
在第二个结果中,所有记录在字段d中都有2个。字段d未在任何join或where子句中使用。
谁能告诉我这里发生了什么?从连接表中选择字段时,为什么连接行为如此不同?它会为每个偏移产生差异。
谢谢!