这是我正在使用的课程。我使用了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
字段。我该怎么做?我也是这样做的新手,所以我们也会感激解释。谢谢。
答案 0 :(得分:0)
你需要一个viewmodel,另一个只有你在视图中需要的属性的类,当你在action中作为参数得到它时,你将它映射到这样的实际实体:
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");
}
...
答案 1 :(得分:0)
您可以简单地避免更新其他字段。要实现这一点,您应该在实体状态修改声明下定义您不想更改的属性。所以问题的答案是:
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");
}