MVC 编辑复杂模型 ICollection 属性



我正在使用.net MVC 4和EF 5。我有一个具有主细节结构的模型,如下所示:

    public partial class Master
    {
     public int IdMaster { get; set; }
     public String MasterName {get; set;}
     public virtual ICollection<Detail> details { get; set; }
    }
    public partial class Detail
    {
     public int IdDetail { get; set; }
     public String DetailName{get; set;}
     public virtual Master master { get; set; }
    }

我创建了一个"创建"视图,其中有主代码和js代码的输入字段用于添加详细信息行。一切都完美分叉,"创建"HTTP POST控制器完美地绑定了所有内容并编码:

    context.Master.Add(master);
    context.SaveChanges();

在"主"表和"详细信息"表中插入。

但是当我做编辑帖子时......我的调试器告诉我绑定很好,我对一些详细信息行和一些新行有一些更新,例如......但是在完成帖子后,我只得到主表的更新,而细节与编辑之前相同。

目前,我正在使用解决方法,方法是在编辑

主控之前删除所有详细信息并将它们重新插入"编辑"控制器中,但如果有一个解决方案,EF 可以检测到此更改并处理细节,我很感兴趣......

更新 1:

    [HttpPost]
public ActionResult Edit(Master master)
    {
       if (ModelState.IsValid)
        {
          db.Entry(master).State = EntityState.Modified;
          db.SaveChanges();
          -- this updates only the Master table
          -- but my Collection Master.details which has some new and some updated 
          -- element properties does not change in database. 
-- How can EF do adding, deleting and inserting into Details table based on my Collection?????
        }
    }

感谢您抽出宝贵时间

使用相同的 enitymodel,我能够更新详细信息。下面是示例代码。由于您没有共享更多代码,因此我假设您必须具有masterid和detail id,然后您正在更新它。

     using (var context = new TestDbContext())
        {
            var master = context.Master.Include(x=>x.details).FirstOrDefault(f => f.IdMaster == 1);
            if(master!=null)
            {
                // hre if you want to update the detail with id detaiid= 1 
                var detail = master.details.FirstOrDefault(d => d.IdDetail == 1);
                if (detail != null)
                {
                    detail.DetailName = "update detail";
                }
                context.Entry(master).State = EntityState.Modified;
                context.SaveChanges();
            }
        }

最新更新