Допустим, у меня есть таблица БД со столбцами A и B, и я использовал конструктор Visual Studio для создания объектов Linq для этой таблицы. Все поля помечены как NOT NULL.
Теперь я пытаюсь отредактировать эту запись, используя типичное редактирование формы MVC и привязку модели, но поле B не должно быть редактируемым, поэтому я не включаю его в форму.
Когда обработчик сообщений привязывает объект, он не заполняет поле B, оставляя его пустым. Теперь, когда я сохраняю объект, я получаю сообщение об ошибке БД, говорящее, что поле B не может быть NULL.
Код для сохранения выглядит примерно так:
m_DataContext.MyObjects.Attach(myObject);
m_DataContext.Refresh(RefreshMode.KeepCurrentValues, myObject);
m_DataContext.SubmitChanges();
Как заставить это работать? Нужно ли мне включать поле B в качестве скрытого поля в форму - я действительно не хочу этого делать, так как оно может одновременно обновляться другими пользователями, и я не хочу топтать его.
Я обнаружил, что решение этой проблемы вращается вокруг получения объекта сущности, связанного с контекстом данных, перед применением изменений. Есть несколько способов сделать это, которые я описал в отдельных ответах ниже.