Подтвердить что ты не робот

Entity Framework Find vs. Где

Есть ли существенная разница между .Find(id) и .Where(x = >x.Id == id), которая должна заставить меня использовать .Find() над .Where()/.First()?

Я бы предположил, что .Find() будет более эффективным, но настолько ли более эффективным, что я должен избегать .Where()/.First()?

Я прошу, что я использую общий набор FakeDbSet в своих тестах, чтобы упростить реализацию поддельных результатов, и до сих пор я обнаружил, что должен наследовать этот класс и предоставить пользовательскую реализацию .Find(), тогда как если я напишите мой код с помощью .Where()/.First() Мне не нужно делать эту дополнительную работу.

4b9b3361

Ответ 1

Дело в том, что find начинается с поиска в локальном кеше контекста, а затем, если нет совпадения, отправляет запрос в db.

where всегда отправляет запрос в db.

С EF 4. * я думал, что sql, сгенерированный find, был слишком сложным и в некоторых случаях приводил к проблеме производительности. Поэтому я всегда использую where даже с EF 5. Я должен проверить sql, сгенерированный find с EF 5.

Итак, в статье find лучше, потому что он использует кеш.