Ответ 1
Find() имеет принципиальное отличие от Where(), Single(), First() и т.д., поскольку он сначала будет искать объект в памяти и только попадет в базу данных, если объект еще не был загружен. Таким образом, попробуйте использовать "Найти" (), где это возможно, поскольку это дает возможность быстрой загрузки нагрузки из памяти. Find() работает только с первичным ключом и не поддерживает lambdas, поэтому он не очень гибкий.
Где() обычно используется для получения списка объектов. Чтобы получить один объект, я обычно использую Single(), SingleorDefault(), First(), FirstorDefault().
Single() и SingleOrDefault() отличаются от First() и FirstOrDefault(), поскольку они гарантируют, что максимум один объект может удовлетворять критериям, которые помогают обеспечить целостность данных в базе данных. Они "Одинарные" предложения делают это, выбирая "TOP 2" в SQL-запросе и затем бросая исключение, если возвращаются два объекта.
Обратите внимание, что вы не должны привязывать их к концу предложения Where().
Итак, вместо
.Where(s => s.Id == 1).FirstOrDefault();
использование:
.FirstOrDefault(s => s.Id == 1);
Я написал сообщение в блоге, чтобы полностью изучить эту проблему: http://judeokelly.com/primer-on-selecting-data-using-entity-framework/