0

次のようなEFのクエリがあります。

var x = _db.qMetaDataLookups.ToList();

SQLサーバーで直接実行するとSELECT * FROM qMetaDataLookup、2155の異なる行が返されます。上記を実行した後、xALSOには2155個の要素が含まれます。

問題は、データが間違っていることです。SQLクエリから取得するのと同じデータをEFから取得していません。

特に、SQL出力に存在する特定の要素があり、それを「WXYZ」と呼びます。これは、クエリのEFバージョンではまったく表示されません(まったく同じデータベースに対して)。

代わりに、私が見つけたのは多くの繰り返しです。リストを呼び出すとx.Distinct()、2155要素からわずか143要素にフィルターされます。

私は困惑しています。この単純なクエリでEFとSQLの結果が異なるのを見たことがありません。非常に単純な[face-palm]の説明があるはずですが、私はそれを見逃しています。

ありがとう。

編集 qMetaDataLookup(ビュー)には、データベースに関する情報が含まれています。本質的には、すべてのテーブルとビュー、およびそれらの各列のリストと、データ型、長さ、精度、スケールなどに関するその他の情報が含まれます。このテーブルの「キー」は、「tableName」と一致する列である必要があります。 columnName "ですが、代わりにEFがすべてのデータ型プロパティを選択しました。これが、クエリが期待どおりに実行されない理由です。

4

2 に答える 2

1

エンティティデータモデルのqMetaDataLookupにエンティティキーが正しく設定されていることを確認してください。エンティティキーがめちゃくちゃになることがあります...

于 2013-01-21T22:31:42.987 に答える
0

問題は、Entity Frameworkが一意の値を期待していたのに、モデルが重複した値を持つキーを使用していたことである可能性があります。これは、たとえば、データモデルが他のテーブルの外部キーで構成される複合主キーを使用した場合に発生します。EFは複合主キーをあまり好まないようです。そのため、クエリから返された結果は、重複した行のように見えるものを生成します。

修正は、一意であることが保証されている代理主キー列をテーブルに追加することのようです。テーブルの複合主キーとして使用されていない限り、問題のない外部列を参照する必要がある場合。

解決策のクレジットを請求することはできませんが、問題の解決に役立ったリンクは次のとおりです:http: //jepsonsblog.blogspot.ca/2011/11/enitity-framework-duplicate-rows-in.html

于 2015-03-13T22:37:10.650 に答える