ADO.Entity обновляет одно поле одной записи без извлечения всей записи

#entity-framework #ado.net #field #updating

#entity-framework #ado.net #поле #обновление

Вопрос:

Какова наилучшая практика для обновления одного поля для одной записи (с определенным идентификатором) с помощью ADO.Entity? Насколько я знаю, вам нужно получить весь объект по идентификатору, обновить свойство и вызвать SaveChanges:

 int id = ...;
var db = new MyEntities();
var o = (from mo in db.myObject
         where mo.id = idObject
         select mo).First();
o.MyProperty = "some value";
db.SaveChanges();
  

Но, похоже, немного накладно извлекать весь объект целиком, поскольку меня не интересуют значения записи, потому что я просто хочу установить свойство, независимо от значений.

Другим вариантом было бы создать хранимую процедуру для этой цели…

Комментарии:

1. Как вы думаете, почему извлечение всей записи является проблемой? Это то, для чего предназначены системы БД. Если запись слишком велика (содержит несколько больших двоичных объектов и т. Д.), Вам следует переделать свою схему.

2. Я не согласен, что это не проблема, потому что, если это поведение выполняется тысячи раз во время работы приложения, это накладные расходы. Просто нет смысла извлекать данные, которые вы не используете, независимо от размера.

3. См . Статью профессора Дональда Кнута «Мы должны забыть о малой эффективности, скажем, в 97% случаев: преждевременная оптимизация — корень всего зла »

4. Ну, я все еще не уверен, что это то, что следует принимать как хорошую практику, но поскольку лучшего решения нет…

Ответ №1:

Re: What is the best practise for updating a single field for one record (with specific ID) using ADO.Entity?

Ответ: Наилучшей практикой является извлечение всей записи, обновление одного или нескольких полей, а затем сохранение записи. — Так же, как вы делаете.