我正在开发一个带有实体框架的小型 ASP.NET MVC4 Web 应用程序,将该应用程序与我的数据库链接起来。我让 Visual Studio 2012 在控制器和视图中生成所有 CRUD 操作,除了编辑之外一切正常。
我生成的对象如下:
public partial class Post
{
public Post()
{
this.Attachment = new HashSet<Attachment>();
}
[Display(AutoGenerateField = false)]
public int post_id { get; set; } // This is the PK of my table
public string title { get; set; }
public string text { get; set; }
[Display(AutoGenerateField = false)]
public System.DateTime created { get; set; }
[Display(AutoGenerateField = false)]
public Nullable<System.DateTime> modified { get; set; }
[Display(AutoGenerateField = false)]
public string author { get; set; } // This is a FK from the "author" table
public virtual ICollection<Attachment> Attachment { get; set; }
public virtual Author Author1 { get; set; }
}
而Edit POST操作如下:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(Post post)
{
if (ModelState.IsValid)
{
post.modified = DateTime.Now;
db.Entry(post).State = EntityState.Modified;
db.SaveChanges(); // DbUpdateConcurrencyException thrown here
return RedirectToAction("Index");
}
ViewBag.author = new SelectList(db.Author, "author1", "password", post.author);
return View(post);
}
当我提交编辑后的帖子时,ASP.NET 吐出一个 DbUpdateConcurrencyException 说该操作影响了意外的行数 (0)。
调试的时候发现author、created、post_id都是null;他们都应该保持自己的价值观。
我怎样才能解决这个问题?
提前致谢。