Код, который вы опубликовали, «знает», что вы хотите обновить запись, потому что он предполагает, что если состояние изменено (которые applycurrentvalues помечает свойства как измененные), то вы должны обновить это поле.
Таким образом, все, что изменяется, устанавливается, а затем отправляется в базу данных. Однако код, в котором есть .First (), не делает здесь ничего полезного.
ApplyCurrentValues ничего не загружает, поэтому ваша первая строка кода загружает это в контекст. Затем вы ApplyCurrentValues объединяет значения в него. Все, что отличается, помечается как измененное и копируется, после чего эти поля отправляются в БД для обновления.
Вы можете профилировать деятельность, проверить
http://msdn.microsoft.com/en-us/magazine/gg490349.aspx
также есть хороший профилировщик демпфера, доступный на http://efprof.com/
Другой вариант - просто прикрепить измененные и сохранить изменения. Я думаю, что это даст только один запрос (обновление базы данных), мне придется перепроверить это.
Этот код будет выглядеть так:
_db.Entry(movie).State = EntityState.Modified; //attaches is as well
_db.SaveChanges();
Это сохранит каждое свойство, но я думаю, что это может быть на одну поездку меньше (обновление, перезагрузка, а не загрузка, обновление, перезагрузка)