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 に答える