从嵌套表MVC 5中删除记录

时间:2017-04-06 14:02:58

标签: asp.net-mvc entity-framework parent-child crud

我从删除3个嵌套表时遇到问题。

当我尝试从第一个表中删除记录时,它会给我一个错误

  

System.Data.SqlClient.SqlException:DELETE语句发生冲突   使用REFERENCE约束

删除操作方法是:

    [HttpPost, ActionName("Delete")]
    [ValidateAntiForgeryToken]
    public ActionResult DeleteConfirmed(int id)
    {
        Parent parent = db.Parent.FirstOrDefault(t => t.ParentID == id);
        foreach(var item in parent.Child.ToList())
        {
            db.Child.Remove(item);
            foreach (var grand in item.Grand.ToList())
            {
                db.Grand.Remove(grand);
            }
        }
        db.Parent.Remove(parent);
        db.SaveChanges();
        return RedirectToAction("Index");
    }

我真的很感激这个问题的任何帮助 此外,如果有人可以指导我使用嵌套表格的CRUD操作教程,这将有助于我解决很多问题。

2 个答案:

答案 0 :(得分:0)

感谢Hyarantar

,这是工作代码
 public ActionResult DeleteConfirmed(int id)
{
    Parent parent = db.Parent.FirstOrDefault(t => t.ParentID == id);
    foreach(var item in parent.Child.ToList())
    {
        foreach (var grand in item.Grand.ToList())
        {
            db.Grand.Remove(grand);
        }
        db.Child.Remove(item);  
    }
    db.Parent.Remove(parent);
    db.SaveChanges();
    return RedirectToAction("Index");
}

我只需要更改删除项目的顺序,因此在循环之后放置了db.Child.Remove(item)来删除选项。

答案 1 :(得分:0)

这是我在MVC 5中的工作,用于通过删除父实体来删除子实体

public ActionResult DeleteConfirmed(int id,Recipee Recipe_Id)         {

        if (Recipe_Id != null)
        {
            using (RecipeeStoreEntities1 context = new RecipeeStoreEntities1())
            {
                var masterData = context.Recipees.Include("Ingredients").Where(p => p.Recipe_Id == id).FirstOrDefault();

                var childData = masterData.Ingredients.ToList();
                foreach (var data in childData)
                {
                    context.Ingredients.Remove(data).Recipe_Id = id;

                }
                context.SaveChanges();
                ModelState.Clear();
            }

            Models.Recipee objreci = new Models.Recipee();
            objreci = db.Recipees.Where(x => x.Recipe_Id == id).FirstOrDefault();
            db.Recipees.Remove(objreci);
            db.SaveChanges();
           // return RedirectToAction("Index");

        }
        return RedirectToAction("Index", Recipe_Id);
    }