【发布时间】:2013-02-27 21:05:33
【问题描述】:
我正在尝试学习 MVC 和 EF 以摆脱 WebForms 和 ADO.NET。我只是在整理我的第一个试用网站,所以看看它是如何运行的,遇到了一个绊脚石。
我正在编辑页面上的记录并按保存。我没有返回任何错误,但是数据没有更新。
文章模型正在更新
public class Article
{
[Key]
public int Id { get; set; }
public string Author { get; set; }
public string Title { get; set; }
public DateTime DateCreated { get; set; }
public string Body { get; set; }
public int Likes { get; set; }
public int Dislikes { get; set; }
public List<Comment> Comments { get; set; }
public string Tags { get; set; }
public int Category { get; set; }
}
Controller上的编辑代码,articleId来自查询字符串。
[HttpPost]
public ActionResult Edit(int articleId, FormCollection collection)
{
var result = from i in db.Articles
where i.Id == articleId
select i;
if (TryUpdateModel(result))
{
db.SaveChanges();
return RedirectToAction("Index");
}
return View(result.First());
}
在调试时,TryUpdateModel() 返回 true 并调用 db.SaveChanges。不返回任何错误。当被引导回控制器上的 Index 方法时,文章显示没有变化。
是不是很明显?
非常感谢
【问题讨论】:
-
第一步是在调试器中验证
if块中的对象实际上已使用新值进行了更新。 -
我的理解是传递给 TryUpdateModel 的结果是您尝试更新的记录。该方法尝试从发布的数据创建模型,然后尝试更新传入的记录。 FormCollection 显示正确的模型架构,但在调试时它不显示值。
-
突然想到,在调试过程中,检查
result实体是否实际已被修改并被 DbContext 跟踪。寻找EntityState.Modified。相关的 SO 问题:stackoverflow.com/questions/7106211/… -
我正在阅读以查看 DbEntityEntry 对象的位置。一旦断点转到 db.SaveChanges(),结果对象似乎没有更改。我没有在结果中看到 EntityState 属性。
-
想通了。真的很愚蠢:(
标签: c# asp.net-mvc-4 entity-framework-4 visual-studio-2012