Ben*_*enk 7 entity-framework-4 asp.net-mvc-3
使用MVC3更新对象
我有一个可以修改的模型,请看下面的示例:
[HttpPost]
public ActionResult Edit(Company c)
{
if (ModelState.IsValid)
{
db.Entry(c).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(c);
}
Run Code Online (Sandbox Code Playgroud)
该模型具有未在视图中显示的其他字段,并且无法由用户修改,但是当我单击提交按钮时,未在视图中显示的字段设置为null.
我可以以某种方式让EF知道不修改某些字段吗?谢谢.
Mar*_*oth 12
通常最好不要直接绑定到实体对象,而是创建一个编辑模型并绑定到该模型.
毕竟......什么是阻止有人回复你不希望用这种方法改变的值?
这里的主要问题是mvc模型绑定在上下文之前更改模型中的属性,因此实体框架不知道哪些值已更改(因此应更新哪些值)
您已略微缓解了这一点,db.Entry(c).State = EntityState.Modified;但它告诉实体框架整个记录已更新.
我通常会做以下事情:
第3步有点乏味,因此考虑使用像automapper这样的工具来简化操作
编辑:
[HttpPost]
public ActionResult Edit(Company c)
{
if (ModelState.IsValid)
{
Company dbCompayObjct = new Company { companyId = c.companyId };
db.Company.Attach(dbCompayObjct);
dbCompanyObjct.CompanyName = c.CompanyName;
dbCompanyObjct.City = c.City;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(c);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16974 次 |
| 最近记录: |