59

ここで、すでに未回答の質問があります。

私の質問は -

EF は実際に大規模なアプリケーションを運用する準備ができていますか?

質問は、これらの根本的な質問から生まれました -

  1. EF はすべてのレコードをメモリにプルしてから、クエリ操作を実行します。テーブルに約 1000 件のレコードがある場合、EF はどのように動作しますか?
  2. 簡単な編集のために、レコードをプルして編集し、次を使用してデータベースにプッシュする必要がありますSaveChanges()
4

5 に答える 5

21

1. EF はすべてのレコードをメモリにプルし、クエリ操作を実行します。テーブルに約 1000 件のレコードがある場合、EF はどのように動作しますか?

それは真実ではない!EF は必要なレコードのみをフェッチし、クエリは適切な SQL ステートメントに変換されます。EF は、オブジェクトを内部でローカルにキャッシュできますDataContext(エンティティに加えられたすべての変更を追跡できます) が、必要な場合にのみコンテキストを開いたままにしておくという規則に従っている限り、問題にはなりません。

2.簡単な編集のために、レコードをプルして編集し、SaveChanges() を使用してデータベースにプッシュする必要があります

それは本当ですが、パフォーマンスの問題が実際に発生しない限り、私はわざわざそうするつもりはありません。1. が当てはまらないため、保存する前に DB から 1 つのレコードのみを取得します。SQL クエリを文字列として作成し、プレーンな文字列として送信することで、これを回避できます。

于 2013-10-11T06:22:07.247 に答える
7
  1. EF は LINQ クエリを SQL クエリに変換するため、すべてのレコードをメモリにプルするわけではありません。生成された SQL が常に最も効率的であるとは限りませんが、1,000 件のレコードがあってもまったく問題にはなりません。
  2. はい、それが 1 つの方法です (1 つのレコードのみを編集する場合)。複数のレコードを変更する場合は、1 つのクエリを使用してすべてを取得し、それらのすべてSaveChanges()の変更を保持できます。
于 2013-10-11T06:25:12.693 に答える