删除EF CTP5中的多个记录

时间:2011-03-09 16:52:59

标签: c# .net entity-framework-4 entity-framework-ctp5

我有一个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);

删除所有此类记录的最佳方法是什么(不使用迭代)?

2 个答案:

答案 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();