每个ID删除许多记录 - MVC C#

Pau*_*cis 2 c# model-view-controller asp.net-mvc entity-framework cascade

我拥有的数据库的设置Company可以有很多Engineer,也可以有很多Territory.如果我应该从列表中删除公司,我需要做一个干净的退出,所以不要只删除公司表格中的公司表格.我必须确保所有记录都被删除.因此,没有子/相关记录成为孤儿数据.

如果我要从所有表中删除一条记录,我只想删除它FirstOrDefault,然后我可以使用

public void RemoveCompany(long companyId)
{
    using (var db = new BoilerServicingDbContext())
    {
        var ec = db.Engineers.FirstOrDefault(x => x.CompanyId == companyId);
        db.Engineers.Remove(ec);
        var tc = db.CompanyTerritories.FirstOrDefault(x => x.CompanyId == companyId);
        db.CompanyTerritories.Remove(tc);
        var p = db.Companies.FirstOrDefault(x => x.Id ==  companyId);
        db.Companies.Remove(p);
        db.SaveChanges();       
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,每个公司有多个工程师,每个公司有一个以上的领土.是否有一个简单的方法,如一般的数据库意义.

DELETE * FROM Engineers WHERE companyId = 1;
Run Code Online (Sandbox Code Playgroud)

此刻我没有Cascading删除设置,所以除此之外.任何其他选择.

VMA*_*Atm 7

为什么不使用.Where()方法在DB中查找所有相应的项目?像这样:

foreach(var ec in db.Engineers.Where(x => x.CompanyId == companyId))
{
    db.Engineers.Remove(ec);
}
// same logic here for other tables
Run Code Online (Sandbox Code Playgroud)

还要考虑@workabyte的答案,因为有一种方法可以cascade delete在您的数据库中实现.