1

当我使用 dbase(oracle) 视图时

from f in MYVIEW
where f.Order=="HERE"
select f

我得到相同的结果(行)。

和...

from f in MYVIEW
where f.Order=="HERE"
select f.ColA

我得到了为 ColA 返回的正确结果

我知道这一定是一个新手问题。还在学习...提前谢谢

4

1 回答 1

3

原因是 EF 默认需要唯一标识每条记录。因此,每个实体都必须具有唯一的键。视图没有键,因此 EF 通过使用所有不包含二进制数据的不可为空的列来推断键。现在 EF 预计这些列将使实体唯一可识别。如果他们不这样做,您将以您在第一个示例中看到的问题结束。当 EF 从结果集中读取实体时,它会检查键,如果已经创建了具有相同键的实体,它会使用该实例而不是创建新实例 -> 将表示结果集中在键列中具有相同值的所有记录由同一个实体实例。我今天描述了如何用视图来避免这个问题

您的第二个示例使用投影。在这种情况下,不会构造实体实例,EF 只返回值。

于 2012-04-30T15:45:24.540 回答