Entity FrameworkのDbContext.Find()は、トップ2と派生テーブルを選択してクエリを生成するのはなぜですか?定義上、問合せは一意でなければならない主キーによって検索されます。Entity FrameworkのDbContext.Find()がトップ2を選択してクエリを生成するのはなぜですか?
答えて
Find
は、指定されたキーを持つエンティティがすでにコンテキスト内にあるかどうかをまずチェックします。そうでなければ、データベースに照会します。可能であれば、SingleOrDefault
を使用してLINQクエリを使用します。 SingleOrDefault
はSELECT TOP 2
に変換され、結果に複数のエンティティが含まれている場合は例外がスローされます。
Find
FirstOrDefault
(これはSELECT TOP 1
に変換されます)を使用しないのはなぜですか。私は分かりませんが、Find
はエンティティが実際にデータベース内で一意であることを確認したいと思います。クエリーが使用するプライマリキーなので、データベース内の主キーは変更されたため、モデルとデータベースが同期しない可能性があります。
本当に仮説です。 EF開発チームだけがおそらく正確な理由を答えることができます。
編集
私は上記のようにこれを行う(DBにおける複合キーに列を追加し、最初のキー列に同じ値を持つレコードを追加)し、その後Find
を呼び出す場合、私は例外を取得します。
シーケンスは、複数の要素
...と、このスタックトレースが含まれています
//...
System.Linq.Queryable.SingleOrDefault[TSource](IQueryable`1 source)
System.Data.Entity.Internal.Linq.InternalSet`1.FindInStore(
WrappedEntityKey key, String keyValuesParamName)
System.Data.Entity.Internal.Linq.InternalSet`1.Find(Object[] keyValues)
System.Data.Entity.DbSet`1.Find(Object[] keyValues)
したがって、Find
は実際にSingleOrDefault
を使用しているようです。
私はLinqPadとVSでSingleOrDefaultを実行すると決してSELECT TOP 2を取得しません。それはEF特有ですか? –
@JamieRRytlewski:これはEFのケースです。それがEF専用かどうかはわかりません。何を試しましたか? LINQ to SQL? – Slauma
はい私はLinqをSqlに使用しました。違いがあります。私はいくつかの読書をしていたようで、それはEFだけに現れているように見えます。 TOP2を持っているのは理にかなっていますが、私はEFを使わないので見たことがありません。 –
- 1. Entity Frameworkの生成不必要なクエリ
- 2. Entity Framework 4.0は効果的なクエリを生成していますか?
- 3. Entity Frameworkがエンティティを部分クラスとして生成するのはなぜですか?
- 4. LINQ Entity Frameworkレコードを選択
- 5. MVC Entity Frameworkヌルが他のエンティティからフィールドを選択する
- 6. このクエリに2つの選択肢があるのはなぜですか?
- 7. Entity Frameworkが冗長外部キーを作成するのはなぜですか?
- 8. Entity Framework 6クエリによってNullReferenceExceptionが生成される
- 9. LINQ to SQLが複数の選択クエリを生成するのはなぜですか?
- 10. Entity Frameworkで生のSQLクエリにカスタムクラスが必要ですか?
- 11. Entity Frameworkで、ビューモデルのディスクリミネータ列が作成されるのはなぜですか?
- 12. 生成されたクエリはEntity Frameworkのバージョンによって異なります
- 13. データベースから複数のオブジェクトを選択します。Entity Frameworkコア
- 14. Entity FrameworkでSQLサーバーがプライマリキーを生成できないのはなぜですか?
- 15. なぜEntity Frameworkクエリで配列を使用できないのですか?
- 16. 2つのクラスをリンクするには、Entity FrameworkとLINQを使用してリスト出力を選択します。
- 17. Entity Frameworkモデルの生成 - このクエリを実行するには、リソースプール 'internal'にシステムメモリが不足しています
- 18. Entity Frameworkでクエリを作成する最適な方法は何ですか
- 19. Entity Frameworkで単一列を選択する方法は?
- 20. Entity Framework - 複数のテーブルに対してクエリを実行し、表示する列を選択する方法
- 21. Entity Frameworkオブジェクトが重複しているのはなぜですか?
- 22. Entity Frameworkによって生成されたクエリの下部ケーシング
- 23. Entity Frameworkの - リアサービスコード生成
- 24. ADO.NET Entity Frameworkでモデルからテーブルを生成する方法は?
- 25. Entity Frameworkはデータベースを削除したいのですが、なぜですか?
- 26. Entity Frameworkで生のOracle SQLクエリをパラメータ化する
- 27. Entity Frameworkのカテゴリツリーを選択してください
- 28. Entity Framework ConcurrencyStampがROWVERSION/TIMESTAMPを使用しないのはなぜですか?
- 29. なぜデータベースDropcolumn Entity Frameworkですか?
- 30. なぜEntity Frameworkはsqlの代わりにメモリ内集計を選択しますか?
私はこの見解に驚いています:あなたはすでにこれを投稿しています:P – RBT