0

我正在尝试使用以下操作结果使用 EF5 更新条目:

[HttpPost]
    public ActionResult Edit(int id, IEnumerable<HttpPostedFileBase> files)
    {
        if (ModelState.IsValid)
        {
            Reference reference = db.References.Single(x => x.Id == id);
            db.Entry(reference).State = EntityState.Modified;
            db.SaveChanges();
            //Other stuff regarding files/images

            return RedirectToAction("Index");
        }
        return View();
     }

没发生什么事。当我调试它时,它会通过代码,因为一切都很好。但是数据库中没有任何更新。

如果需要,这是模型:

public class Reference
    {
        public int Id { get; set; }
        public string Headline { get; set; }
        public string Text { get; set; }
        public DateTime Date { get; set; }
        public IEnumerable<HttpPostedFileBase> ImageUploadMain { get; set; } 
        public String MainFileName { get; set; }
        public IEnumerable<HttpPostedFileBase> ImageUpload { get; set; }
        public virtual ICollection<Image> Files { get; set; }
        public virtual ICollection<RefProperties> Properties { get; set; }
        public int CategoryId { get; set; }
        public virtual Category Category { get; set; }
}

public class Image
{
    public int Id { get; set; }
    public string FileName { get; set; }
    public virtual Reference Reference { get; set; }
}

public class RefProperties
{
    public int Id { get; set; }
    public string Key { get; set; }
    public string Value { get; set; }
}
public class Category
{
    public int CategoryId { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Reference> References { get; set; }
}   

不仅相关条目没有更新,像“标题”这样的主要属性也不能更新。我究竟做错了什么?顺便说一句,创建/删除工作正常。

4

2 回答 2

1

正如 Gert Arnold 所说,您实际上并没有修改任何Reference值,因此不会更新任何内容。通过调用db.Entry(reference).State = EntityState.Modified,您只是将检索到的实体的状态设置为在ChangeTracker. 当您调用SaveChanges() 时,它只会使用您获取的相同值更新数据库中的参考记录。

您需要更新一些 Reference 实例属性才能看到更改。

[HttpPost]
    public ActionResult Edit(int id, IEnumerable<HttpPostedFileBase> files)
    {
        if (ModelState.IsValid)
        {

            Reference reference = db.References.Single(x => x.Id == id);
            reference.HeaderText = "Changed";
            /* No need to interact with the change tracker as the entity is already tracked and you've made a change */
            // db.Entry(reference).State = EntityState.Modified;


            /* Create/Modify/Update/Delete other entities */

            db.SaveChanges();
            //Other stuff regarding files/images

            return RedirectToAction("Index");
        }
        return View();
     }  
于 2013-01-06T17:36:08.040 回答
0

继承人我一直在寻找:

TryUpdateModel(reference, "");

它有大量的重载。这虽然有效

于 2013-01-06T18:19:04.980 回答