我有一个Person类:
public class Person {
public int Id { get; set; }
public int DeptId { get; set; }
public decimal Salary { get; set; }
}
在数据库中,Id和DeptId都标记为主键。
我试图删除数据库中DeptId值与x匹配的所有记录(输入变量。)
如果我访问这样的记录:
var people = Database.People.Where(p => p.DeptId = 10);
删除所有此类记录的最佳方法是什么(不使用迭代)?
答案 0 :(得分:2)
因为您的Person具有来自Id和DepId的复杂PK,所以您的模型应包含识别关系。在这种情况下,您也可以这样做:
var dep = Database.Departments
.Include(d => d.People)
.Where(d => d.Id == 10)
.Single();
dep.People.Clear();
Database.SaveChanges();
它与在迭代中删除人员相同,因为EF无法批处理命令。它会将每个人在单独的往返中删除到DB。如果你有很多人在部门打电话:
Database.Database.SqlCommand("DELETE FROM People WHERE DepId = {0}", 10);
答案 1 :(得分:1)
people.ToList().ForEach(p => Database.DeleteObject(p));
Database.SaveChanges();