我的模型看起来像这样:
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);
}