0

LINQ to Entities が正しい結果を返すには、テーブルに主キーが必要であることがわかりました。それがなければ、予想される行数を取得しますが、重複を含みます (したがって行が失われます)。この問題はhereおよび hereで説明されており、バグであると考えています。

私のテーブルの 1 つで、各行は一意ですが、null 許容列を主キーで使用できないため、すべてのフィールドで複合キーを作成できません (これも SQL Server の制限と考えています)。

では... LINQ to Entities を使用してこのテーブルから選択するときに、どうすれば正しい結果を得ることができますか? 「キー」は、Visual Studio モデル デザイナーのすべての列にわたって「エンティティ キー」を作成することである可能性があると思いますが、これを行う方法がわかりません。null 許容列で Entity Key = true を設定すると、例外がスローされます。

ある段階で私はあきらめて、自動インクリメントを有効にして ID int 列を追加し、それを PK として使用して問題を解決しましたが、常に削除/挿入されるデータの量のためにこれを捨てなければなりませんでした (それはすべての行が削除されず、衝突が発生するわけではないため、スケジュールに従って自動インクリメント カウンターを単純にリセットすることはできません)。

私の最後の手段は、ビッグイント ID 列を PK として追加し、自動インクリメント シード値リセッターを取り除き、それがアプリケーションの存続期間中「十分長く」続くことを願っていますが、私はこれに満足していません。(編集:わかりました...それは十分に長持ちします。私の主な関心事はパフォーマンスです)

4

0 に答える 0