首先更新一对多关系ASP.NET MVC EF代码

时间:2016-11-21 20:35:40

标签: asp.net-mvc entity-framework code-first

我有一个表单,其中有一个部分,它使用BeginCollectionItem生成的jQuery选项卡。这是通过一对多关系完成的。这是post的延续。我可以在表单中创建多个选项卡并可以提交。现在,我想发布已编辑的字段。我是这个的新手,我想我需要调用我的子实体添加或删除但不太确定。如果你能给我一个示例代码,我将不胜感激。

因此,当我单击编辑按钮时,在我的调试器中,NewForm实体会加载所有已编辑的字段,包括关联的Family字段,但是FamilyId在最初加载时始终为null。

型号:

public class NewForm
{
    public int NewFormId { get; set; }
    public string Name { get; set; }

    public ICollection<Family> Families{ get; set; }
}

public class Family
{
    public int FamilyId { get; set; }
    public string Name { get; set; }   

    public int NewFormId { get; set; }
    public virtual NewForm NewForm{ get; set; }
}

我运行了for循环,因为加载的newForm的族实体的newFormIds为空。

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit(NewForm newForm)
    {            
       if (ModelState.IsValid)
       {
           db.Entry(newForm).State = EntityState.Modified;
           db.SaveChanges();
           return RedirectToAction("Index");
       }

        return View(newForm);
    }

但它会引发错误:

  

附加“Test.Models.Family”类型的实体失败,因为同一类型的另一个实体已经具有相同的主键值。如果图中的任何实体具有冲突的键值,则在使用“附加”方法或将实体的状态设置为“未更改”或“已修改”时,可能会发生这种情况。这可能是因为某些实体是新的并且尚未收到数据库生成的键值。在这种情况下,使用“添加”方法或“已添加”实体状态来跟踪图表,然后根据需要将非新实体的状态设置为“未更改”或“已修改”。

当我更改家庭部分中的字段或添加/删除标签时,我需要在控制器中做什么才能成功发布编辑?

0 个答案:

没有答案