5

我在数据库中定义了一个视图(archiveContentPreviews),它将几个表连接在一起,在 Linq 中它有一个实体键(ArchiveID),我想用这个简单的查询来查询这个视图:

        var x = from fields in entities2.archiveContentPreviews
                where fields.ArchiveID == archiveID
                select fields;
        return x.ToList<archiveContentPreview>();

它返回确切数量的结果但第一个结果的多个副本的问题,当我在 SQL 管理工作室中执行该查询时,它返回正确的结果,有什么帮助吗?!

4

2 回答 2

6

这通常发生在指定为主键的列(或列)在视图中没有唯一值时。在您的情况下,ArchiveID可能在大量视图行中重复(您的where子句也表明了这一点)。您必须找到(或添加到视图中)唯一标识视图行的列组合,并将其标记为 EF 模型中的主键。

请注意,生成的 SQL 查询返回的数据可能包含具有不同值(但相同ArchiveID)的行,但 EF 只是将实体对象具体化为每个ArchiveID具有它可以为该 id 找到的第一个结果。

于 2013-02-11T16:28:27.000 回答
1

请注意一种解决方法(如果您不能指定其他键 - 例如对于您不管理但只是只读访问或其他任何内容的数据表)是选择查询中的各个列。

var x = from fields in entities2.archiveContentPreviews
                where fields.ArchiveID == archiveID
                select new {fields.col1, fields.col2};
        return x.ToList<archiveContentPreview>();
于 2017-07-19T20:12:41.823 回答