5

データベース (archiveContentPreviews) で定義されたビューがあり、いくつかのテーブルを結合し、Linq では 1 つのエンティティ キー (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 クエリによって返されるデータには、異なる値 (ただし同じ ) を持つ行が含まれる可能性がありますが、EFは、その ID に対して見つけた最初の結果を使用して、ArchiveIDそれぞれのエンティティ オブジェクトを具体化するだけであることに注意してください。ArchiveID

于 2013-02-11T16:28:27.000 に答える