问题
一般我们编辑某些模型的时候会用到类似这样的代码:
[HttpPost]
public ActionResult Edit(Article model)
{
if (model.Id == 0)
{
return HttpNotFound\(\);
}
using (db)
{
db.Entry(model).State = EntityState.Modified;
db.SaveChanges\(\);
}
return RedirectToAction("Index");
}
1 |
|
很显然如果我们类似使用dbContext的执行sql语句就有点本末倒置了:
1 |
|
### 解决办法
使用类似下列代码:也就是只设置模型的某些特定的字段来告诉EF我们希望修改哪些字段。
`
public ActionResult TestEdit(int id=0)
{
var model = new Article {Id = id, Title = $”after edit!current time: {DateTime.Now}”};
db.Article.Attach(model);
db.Entry(model).Property(x => x.Title).IsModified = true;
db.SaveChanges();
return RedirectToAction(“Index”);
}
上述代码只修改了文章的标题,而其他字段并没有做任何的修改,整个修改过程也没涉及到任何的读取数据库操作。这样的修改显然要更加合理。