【发布时间】:2012-09-30 14:13:07
【问题描述】:
我一直在寻找一种正确的方法来标记在 MVC 中更新模型时不会更改的属性。
以这个小模型为例:
class Model
{
[Key]
public Guid Id {get; set;}
public Guid Token {get; set;}
//... lots of properties here ...
}
那么 MVC 创建的编辑方法如下所示:
[HttpPost]
public ActionResult Edit(Model model)
{
if (ModelState.IsValid)
{
db.Entry(model).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(model);
}
现在,如果我的视图不包含令牌,它将通过该编辑被取消。
我正在寻找这样的东西:
db.Entry(model).State = EntityState.Modified;
db.Entry(model).Property(x => x.Token).State = PropertyState.Unmodified;
db.SaveChanges();
到目前为止我发现的最好的方法是包容并手动设置我想要包含的所有属性,但我真的只想说要排除哪些。
【问题讨论】:
-
我不认为这是重复的:我想始终完全排除某个属性的更新。用户应该没有能力改变它。
-
您可以使用视图模型并仅映射您想要更新的内容。
-
我可以。有几种方法解决这个问题。但我想知道是否有这样做的好方法,如果有,它是如何工作的。顺便说一句,我对这个 atm 的最小“解决方案”是打开另一笔交易:
using (var db2 = new DataContext()) model.Token = db2.Models.Find(model.Id).Token;但我对这个也不满意。 -
我承认这是“正确”的做法,但在这种情况下不这样做是有原因的:a)开销,b)不敏捷,c)不可维护/容易出错.所以是的,我拒绝创建两个相同的类,除了一个属性。
标签: c# entity-framework