Member 12658724 Ответов: 1

Привязка модели Mvc, отсутствие одного поля при сохранении


Допустим, я использую привязку модели в MVC.
public ActionResult Edit(MyModel model)
{
    db.SaveChanges();
    return View(model);
}

Когда мы проходим модель, мы пропускаем одно поле в модели.
Что произойдет, если мы сохраним его в БД?

Что я уже пробовал:

Не уверен но думаю
It depends if the field that you forgot to set is mandatory or not.

Kornfeld Eliyahu Peter

Что вы имеете в виду под "мы пропускаем одно поле в модели"?

Member 12658724

Скажем, у нас есть класс людей. У него есть два свойства: имя и возраст. Когда мы проходим мимо примера людей, мы только указываем возраст. Мы забываем указать имя в модели.

Kornfeld Eliyahu Peter

Это зависит от того, как он объявлен в SQL, если он обнуляется, он будет успешным, в противном случае потерпит неудачу...

1 Ответов

Рейтинг:
11

Richard Deeming

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

Вам нужно будет начать с извлечения соответствующей сущности из базы данных:

var entity = db.YourSet.Find(model.PrimaryKey);
if (entity == null) return RedirectToAction("Index");

Затем вам нужно будет скопировать значения из разнесенных данных. Вы можете сделать это либо вручную:
entity.Prop1 = model.Prop1;
entity.Prop2 = model.Prop2;
...

Или вы можете использовать TryUpdateModel[^] метод. Но вы захотите явно указать, какие свойства могут быть обновлены, чтобы предотвратить перезапись злоумышленником вещей, которые не должны быть изменены:
TryUpdateModel(entity, new[] { "Prop1", "Prop2", ... });

Как только вы это сделаете, затем вы можете сохранить изменения:
db.SaveChanges();
return View(model);

Если вы не копируете свойство из опубликованных данных или не включаете его в список включенных свойств, то значение базы данных не будет изменено.

Если вы копируете / включаете свойство, но пользователь не ввел значение, то значение базы данных будет очищено. Если свойство требуется, то при попытке сохранить вы получите ошибку проверки. В противном случае значение в базе данных будет перезаписано.