При поиске лучших практик выполнения операции CRUD через EF я заметил, что перед обновлением объекта настоятельно рекомендуется использовать методы или Find()
. Он хорошо работает и, согласно документации EF, эти методы приносят сущность в контекст, который для меня совершенно ясен. Но следующий код меня смутил.Зачем использовать Attach для обновления Entity Framework 6?
public void Update(object entity)
{
Record record = new Record() {
id = 1,
value = 5
};
using (SomeContext ctx = new SomeContext())
{
ctx.Entry(record).State = EntityState.Modified;
ctx.SaveChanges();
}
}
Предположим, у нас есть запись с id = 1 в базе данных. При этом условии вышеописанный код обновит запись (установите значение 5). Вопрос в том, почему он работает? И тогда почему я должен использовать Attach()
?. Насколько я понимаю, запись никак не привязана к контексту. Я прочитал соответствующие главы книги this и the tutorial, но они используют подход с двумя запросами. Также я сердито, но не нашел ответа на мой вопрос. Помогите мне с объяснением или некоторыми хорошими материалами, пожалуйста.
спасибо, но почему эта запись в настоящее время отслеживается контекстом? –
Если объект отслеживается и вы изменяете какое-либо свойство, состояние объекта должно измениться на «Изменено» из-за изменения отслеживания, но для этого ваши сущности должны соответствовать этим требованиям [https://msdn.microsoft.com/ en-us/library/dd468057 (v = vs.100) .aspx) – octavioccl
Я думаю, что это [ссылка] (https://www.safaribooksonline.com/library/view/programming-entity-framework/9781449331825/ch04s03.html) мог ответить на все ваши вопросы. – octavioccl