我从删除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操作教程,这将有助于我解决很多问题。
答案 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);
}