使用Entity Framework更新模型中列表属性的最佳方法是什么?

时间:2015-03-23 04:31:42

标签: asp.net-mvc entity-framework model-view-controller

我的模型看起来像这样:

public class Parent
{
  public int Id {get; set;}
  public virtual List<Child> Children {get; set;}
}

public class Child
{
  public int Id {get; set;}
  public int age {get; set;}
}

现在,我想修改父级并将子级从c1, c2更改为c2, c3。我目前正在使用View中的复选框来实现此目的。但是,结果从未反映在数据库中。我认为这是因为EF正在创建的外键约束。 (是的,我的控制器中有db.Entry(role).State = EntityState.Modified;行。)

我不知道如何最好地实现这一目标。我每次都要创建一个新的父母吗?或者,我是否手动删除未从父母的孩子中选择的每个孩子?或者我每次想要更新时都创建一个新的孩子列表?或者更干净的东西?

编辑:添加控制器代码

    public ActionResult Edit(ViewModel model, String[] selectedChildren)
    {
        var parent= db.Parent.FirstOrDefault(r => r.Id== model.Parent.Id);

        //Delete any child from parent that is not in selected children  
        foreach (var child in selectedChildren)
        {
            if (!(Parent.Children.Contains(child)))
            {
                parent.Children.Remove(child);
            }
        }

        foreach (var s in selectedChildren)
        {
            var child = db.Children
                .FirstOrDefault(p => p.Id == s);
            parent.Children.Add(child);
        }

        if (ModelState.IsValid)
        {
            db.Entry(parent).State = EntityState.Modified;
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        return View(model);
    }

0 个答案:

没有答案