如何删除表中的行及其与Entity Framework的所有外键关系?

时间:2016-08-20 17:32:45

标签: c# sql-server entity-framework linq

我有一张名为“类别”的表 enter image description here

与此表有关系

enter image description here

我如何删除“ForumTest”类别以及第二个表中与之相关的所有线程?

编辑:这是我目前的代码,仅适用于没有关系的类别

[HttpPost]
public ActionResult DeleteCategory(int? id)
{
    Category category = db.Categories.Find(id);

    db.Threads.RemoveRange(category.Threads);
    db.Categories.Remove(category);
    db.SaveChanges();

    return RedirectToAction("Categories");
}

2 个答案:

答案 0 :(得分:1)

您需要使用cascading delete配置您的关系。覆盖上下文中的OnModelCreating方法并添加:

modelBuilder
    .Entity<Thread>()
    .HasRequired(s => s.Category)
    .WithMany(r => r.Threads)
    .HasForeignKey(s=>s.CategoryId)
    .WillCascadeOnDelete(true);

答案 1 :(得分:0)

Category category = db.Categories.Find(id);

db.Threads.RemoveRange(category.Threads);
db.Categories.Remove(category);
db.SaveChanges();

此后删除所有相关的表数据,如。

var categoryDetail = relatedtable.Find(id);


    db.relatedtable.RemoveAll(categoryDetail);
    db.SaveChanges();