Как обновить определенные поля в asp.net mvc

63
5

И это класс, который я использую. Я использовал первый подход db.

public partial class Ingredient
{
public int id { get; set; }
public string name { get; set; }
public string desc{ get; set; }
public byte is_deleted { get; set; }
public int Ingredient_Type_id { get; set; }
public int UOM_id { get; set; }
}

У меня есть этот код, защищенный, который обновляет запись.

public ActionResult EditDetails(Ingredient ingredient)
{
if (ModelState.IsValid)
{
db.Entry(ingredient).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.UOM_id = new SelectList(db.Unit_Of_Measurement, "id", "name", ingredient.UOM_id);
ViewBag.Ingredient_Type_id = new SelectList(db.Ingredient_Type, "id", "name", ingredient.Ingredient_Type_id);
return View(ingredient);
}

Из того, что я вижу и понимаю в приведенном выше коде, он обновляет все поля в записи. Однако я хочу только обновить поля name и desc. Как мне это сделать? Я также новичок в этом, поэтому объяснение тоже будет оценено. Спасибо.

спросил(а) 2021-01-25T17:33:14+03:00 4 месяца, 4 недели назад
1
Решение
132

Вы можете просто не обновлять другие поля. Чтобы достичь этого, вы должны определить свойства, которые вы не хотите изменять в объявлении изменения состояния объекта. Таким образом, ответ на вашу проблему будет следующим:


                if (ModelState.IsValid)
{
db.Entry(ingredient).State = EntityState.Modified;
db.Entry(ingredient).Property("is_deleted").IsModified = false;
db.Entry(ingredient).Property("Ingredient_Type_id").IsModified = false;
db.Entry(ingredient).Property("UOM_id").IsModified = false;
db.SaveChanges();
return RedirectToAction("Index");
}

ответил(а) 2021-01-25T17:33:14+03:00 4 месяца, 4 недели назад
45

вам нужен viewmodel, другой класс, который имеет только свойства, которые вам нужны в представлении, и когда вы получите его в действии в качестве параметра, вы сопоставьте его с фактическим объектом, что-то вроде этого:

public class IngredientInput
{
public int id { get; set; }
public string name { get; set; }
public string desc{ get; set; }
}

public ActionResult EditDetails(Ingredient input)
{
if (ModelState.IsValid)
{
var ent = db.Set<Ingredient>().SingleOrDefault(o => o.id == input.id)
ent.name = input.name;
ent.desc = input.desc;
db.SaveChanges();
return RedirectToAction("Index");
}
...

ответил(а) 2021-01-25T17:33:14+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема