在数据库视图上使用选择器LINQ的结果不同

时间:2012-04-30 15:35:16

标签: linq entity-framework

当我使用dbase(oracle)视图时

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

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

随着......

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

我为ColA返回了正确的结果

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

1 个答案:

答案 0 :(得分:3)

原因是默认情况下EF需要唯一标识每条记录。因为每个实体都必须有唯一的密钥。视图没有密钥,因此EF通过使用不包含二进制数据的所有非可空列来推断密钥。现在EF希望这些列能够使实体具有唯一可识别性。如果他们不这样做,您将在第一个例子中看到问题。当EF从结果集中读取实体时,它检查密钥,如果已经创建了具有相同密钥的实体,则它使用该实例而不是创建新实例 - >结果集中具有相同键值的所有记录将由同一个实体实例表示。我今天描述了how to avoid this problem with views

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