Asp.net mvc 从嵌套表MVC 5中删除记录

Asp.net mvc 从嵌套表MVC 5中删除记录,asp.net-mvc,entity-framework,parent-child,crud,Asp.net Mvc,Entity Framework,Parent Child,Crud,我在从我拥有的3个嵌套表中删除时遇到问题 当我尝试从第一个表中删除一条记录时,它会给我一个错误 System.Data.SqlClient.SqlException:删除语句冲突 带引用约束 删除操作方法是: [HttpPost, ActionName("Delete")] [ValidateAntiForgeryToken] public ActionResult DeleteConfirmed(int id) { Parent parent =

我在从我拥有的3个嵌套表中删除时遇到问题

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

System.Data.SqlClient.SqlException:删除语句冲突 带引用约束

删除操作方法是:

    [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操作的教程,这将对我有很大帮助。

这是感谢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)已放置在删除选项的循环之后。

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

公共行动结果删除已确认(内部id、接收方配方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);
    }

首先,您需要从问题表中删除记录,因为您在问题表中添加了FK,这就是为什么在删除包含FK的所有记录之前,您不能删除主键。您正在尝试删除其他表中引用的数据:您不能这样做。请删除约束,删除数据并重新创建约束,或者首先删除外键引用的数据。(FK表示外键,这是您的错误消息)很抱歉,我对所有这些都不熟悉。如果能提供一个示例,我将不胜感激。@Eyad遵循示例。希望它对您有所帮助。@Eyad基本上是将
db.Question.Remove(item)
放在
foreach之后(item.Options中的var选项){db.option.Remove(option);}